11.为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符。
显然,由于动态内存分配,绝对会有深浅拷贝的问题,要重写拷贝构造函数,使其为深拷贝,才能实现真正意义上的拷贝。这是我理解的关于要声明拷贝构造函数的原因。
而对于赋值操作符,类似的道理。
A b = a;
b = a;对于上述两种形式,上面调用的是复制构造函数,而下面才是 赋值操作符=。赋值与复制很相似,缺省的操作都是将...
分类:
编程语言 时间:
2014-10-07 21:51:04
阅读次数:
197
c++primer第四版435
1.赋值( = ), 下标( [ ] ) ,调用 ( ( ) ), 成员访问箭头 (->)等操作符必须定义为成员,定义为非成员时,编译器报错
2. 像赋值一样,符合赋值操作符通常应定义为类的成员,但是定义为非成员的复合赋值操作符时不会出现编译错误
3.改变对象状态或给定类型紧密联系的其他一些操作符,如自增,自减和解引用,通常应定义为类的成员
4.对称操作...
分类:
编程语言 时间:
2014-10-03 16:55:54
阅读次数:
219
假如有下面这样一个类:
class A{
public:
A(int p, char q):x(p), c(q){ cout << "constructor called" << endl; }
A(const A& a){x = a.x; c = a.c; cout << "copy constructor called" << endl;}
~A(){cout << "destruc...
分类:
编程语言 时间:
2014-09-28 02:30:00
阅读次数:
160
我们都知道,如果在一个函数调用另一个函数,假设是 main 函数调用 fun 函数,这个 fun 函数返回一个临时类类型变量,那么这个时候编译器就会在 main 函数申请一个空间并生成一个临时对象,通过拷贝构造函数将 fun 返回的临时变量的值拷贝到这个临时对象。我们看如下的代码:#include ...
分类:
其他好文 时间:
2014-09-25 01:13:18
阅读次数:
382
1.在定义类的赋值描述符成员函数时,有以下几点要注意:1)判断是否是自己赋值给自己2)返回值是const类的引用(为了连续赋值)3)参数是const类的引用4)如果数据成员中有指针,注意要深拷贝,且要释放之前指针指向的内存。2.类的拷贝构造函数,一定不能使用该类型的变量做参数,会无法通过编译的。因为...
分类:
其他好文 时间:
2014-09-21 00:37:29
阅读次数:
334
在 c++ primer 5 中在说到string的章节里面有这样一句话:string s5 = "hiya"; // copy initialization也就是说,这里说上面这句是拷贝初始化,也就是调用拷贝构造函数。而下面这句:string s6("hiya"); // direct init....
分类:
编程语言 时间:
2014-09-20 21:35:19
阅读次数:
208
3-4 计算长方形的周长和面积
Time Limit: 1000MS Memory limit: 65536K
题目描述
通过本题的练习可以掌握拷贝构造函数的定义和使用方法;
设计一个长方形类Rect,计算长方形的周长与面积。类中有私有数据成员Length(长)、Width(宽),由具有缺省参数值的构造函数对其初始化,函数原型为:Rect(double Length=0...
分类:
其他好文 时间:
2014-09-19 17:42:15
阅读次数:
191
1. C++默认调用哪些函数当类中的数据成员类型是trival数据类型(就是原c语言的struct类型)时,编译器默认不会创建ctor、 copy ctor、assign operator、dctor。只有在这些函数被调用时,编译器才会创建他们。这时候我们要自己创建构造函数,初始化内置数据类型。一般...
分类:
编程语言 时间:
2014-09-15 22:37:09
阅读次数:
234
前言 在前面的文章中,细致地分析了构造函数,拷贝构造函数,赋值运算符,析构函数这几个类中最重要函数的用法。 如果严格地遵循这些做法,可以消除绝大部分资源管理的问题。 然而,要想更灵活的使用对象中的资源,仅仅这些还不够。譬如,若你想自己控制对象资源的生命周期(不要在作用域结束的时候自动被析构掉)...
分类:
其他好文 时间:
2014-09-15 14:15:08
阅读次数:
151
拷贝构造函数的第一个参数必须是引用类型,此参数几乎总是const的引用。拷贝构造函数在几种情况下会隐式地使用。因此,拷贝构造函数不应该是explicit的
即使我们定义了其他构造函数,在没有拷贝构造函数时,编辑器也会为我们合成的。编辑器从给定对象中依次将每个非static成员拷贝到创建的对象中。每个成员决定了它使用何种方式进行拷贝。类调用拷贝构造函数,数组逐个拷贝,内置类型直接拷贝
strin...
分类:
编程语言 时间:
2014-09-11 11:11:50
阅读次数:
342