c++ 拷贝构造练习
#include<iostream>
using namespace std;
class Vector
{
private:
int *dwp;
int size;
void clone(const Vector v)
{
this->size=v.size;
this->dwp=new int[size];
for(int i=0;i<size;i++)
{
dwp[i]=v[i];//调用重载下标,相当于this->dwp[i]=v.dwp[i]
}
}
void dispose()
{
delete[] dwp; // 删除指针指向的空间,如果不删除,在调用析构函数的时候只会释放指针本身所占用的内存。
}
public:
//拷贝构造,
Vector(const Vector &v)
{
clone(v);
}
Vector(int s ):size(s),dwp(new int[s])
{
if(size<0)
dwp= NULL;
else
{
for(int i=0;i<size;i++)
{
dwp[i]=0;
}
} }
Vector(int *a,int s):size(s),dwp(new int[s])
{
for(int i=0;i<size;i++)
{
dwp[i]=a[i];
}
}
int get_size()const
{
return size;
}
//重载下标。 用于输入。
int& operator[](int index)
{
return dwp[index];
}
//重载下标, 用于输出。加引用的目的是避免产生零时变量,增加开销。
const int& operator[](int index) const
{
return dwp[index];
}
//重载 = 运算符
const Vector& operator=(const Vector& v)
{ if(this!=&v)
{
delete []dwp; //删除dwp指向的空间。
this->size=v.size;
dwp=new int[size]; //开辟新的空间。
for(int i=0;i<size;i++)
{
dwp[i]=v[i];
}
}
}
//析构函数
~Vector()
{
dispose();
}
};
//重载输出
ostream & operator<<(ostream& out,const Vector& v)
{
int s=v.get_size();
for(int i=0; i<s;i++)
{
out<<v[i]<<endl;
}
out<<endl;
return out;
}
//重载输入
istream& operator>>(istream&in,const Vector& v)
{
int s=v.get_size();
for(int i=0;i<s;i++)
{
in>>v[i];
}
return in;
}
int main()
{
int dwint[3]={1,3,5};
cout<<"=========v============"<<endl;
Vector v(dwint,3);
cout<<v; //调用重载输出 v.operator()
cout<<"=========v2============"<<endl;
Vector v2(v);
cout<<v2;
cout<<v2.get_size(); return 0;
}
c++ 拷贝构造练习的更多相关文章
- c++拷贝构造和编译优化
#include <iostream> using namespace std; class MyClass { public: MyClass(); MyClass(int i); My ...
- C++ 构造函数、析构函数、拷贝构造、赋值运算符
之所以要把它们放在一起,是因为在使用C/C++类语言的时候,很容易混淆这几个概念(对Java来说完全没有这样的问题,表示Javaor完全没有压力). 先建立一个测试类(包含.h和.cpp) //~ P ...
- C++ Primer笔记9_构造函数_拷贝构造(深拷贝与浅拷贝)
1.构造函数: >构造函数是一个特殊的.与类同名的成员函数,用于给每一个成员设置适当的初始值. >构造函数不能有返回值,函数名与类名同样. >缺省构造函数时,系统将自己主动调用该缺省 ...
- C++拷贝构造&操作符重载
头文件 DString.h如下 #ifndef __DSTRING_H #define __DSTRING_H #endif #include <stddef.h> class DStri ...
- C++对象的构造、析构与拷贝构造
今天下午在研究虚函数的时候遇到了一个问题,觉得很有意思,记录一下. 先看代码: class Base { public: Base(int value) { m_nValue = value; cou ...
- 重点:QObject 的拷贝构造和赋值操作——私有
QObject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域.因此所有继承 ...
- C++之旅:拷贝构造与友元
拷贝构造与友元 拷贝构造是在构造一个对象的时候将已有对象的属性拷贝给新的对象:友元可以让一个类的所有属性(主要是private)对特定的类开放 拷贝构造 如果没有复写拷贝构造函数,系统会帮我们默认生成 ...
- C++ 进阶5 拷贝构造 深度复制 运算符重载
C++ 进阶5 拷贝构造 深度复制 运算符重载 20131026 例子: 运行环境是G++ 编译, /* * main.cpp * * Created on: 2013年10月26日 * ...
- 拷贝构造和拷贝赋值、静态成员(static)、成员指针、操作符重载(day06)
十七 拷贝构造和拷贝赋值 浅拷贝和深拷贝 )如果一个类中包含指针形式的成员变量,缺省的拷贝构造函数只是复制了指针变量的本身,而没有复制指针所指向的内容,这种拷贝方式称为浅拷贝. )浅拷贝将导致不同对象 ...
随机推荐
- Balanced Numbers(数位+状压)
题意:求给定区间,一个数的数位上每个奇数出现偶数次,每个偶数出现奇数次,这样数的个数 分析:先考虑状态,但总是想不全,所以要把状态压缩一下,用三进制,0 该数不放 1 放了奇数次 2放了偶数次 dp ...
- BZOJ2038: [2009国家集训队]小Z的袜子(hose) 莫队算法
要使用莫队算法前提 ,已知[l,r]的答案,要能在logn或者O(1)的时间得到[l+1,r],[l-1,r],[l,r-1],[l,r+1],适用于一类不修改的查询 优美的替代品——分块将n个数分成 ...
- jQuery mobile 核心功能
原文地址:http://jquerymobile.com/demos/1.0b2/#/demos/1.0b2/docs/about/features.html 基于 jQuery 核心,使用和jQue ...
- C#打印100以内质数
bool b = false; ; i < ; i++) { ; j < i; j++) { ) { b = false; break; } else { b = true; } } if ...
- POJ 3321 Apple Tree(dfs序树状数组)
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10486 题意:一颗有n个分支的苹果树,根为1,每个分支只有一个苹果,给出n- ...
- win10+vs2013+Qt5.4 安装方法
环境:win10 cn_visual_studio_ultimate_2013_x86_dvd_3009109 qt-opensource-windows-x86-msvc2013_64_opengl ...
- Eclipse hangs on loading workbench, eclipse停在启动界面的处理办法
http://stackoverflow.com/questions/8972034/eclipse-hangs-on-loading-workbench 解答一: In most cases, rm ...
- C#将对象转换成JSON字符串,Newtonsoft.Json (JSON.NET)
官方API说明文档 http://www.newtonsoft.com/json/help/html/N_Newtonsoft_Json.htm http://www.newtonsoft.com/ ...
- java类的访问控制符与其他几个特殊修饰符的总结
1 访问控制符 1.1 字段或者方法的访问控制符 同一个类中 同一个包中 不同包中的子类 不同包中的非子类 private YES 默认(包可访问) YES YES prot ...
- CSS区块、浮动、定位、溢出、滚动条
CSS中区块的使用 CSS中浮动的使用 CSS中定位的使用 CSS中溢出的使用 CSS中滚动条的使用 17.1 CSS中区块的使用 属性名称 属性值 ...