C++构造函数,复制构造函数,赋值操作符
2015-07-22 20:56
316 查看
构造函数:
当我们没有声明一个构造函数时,编译器就有可能为我们合成一个,用于初始化一些拥有构造函数的基类或者自身的成员变量,如果自身或者父类含有虚函数,也需要为每一个对象生成vptr,这时也会产生一个默认构造函数 。当含有虚基类的时候,也需要有指向虚拟基类对象的指针生成,这个也是编译器在构造对象期间完成。上面所说的这些,都需要相应的代码支持,要么合成一个默认构造函数包含这些代码,在已经有声明构造函数时,编译器则会扩张已有的函数,将这些代码添加进去。
总之编译器会确保我们的对象在生成后拥有适当的值。而这些是通过扩展构造函数或生成默认构造函数实现的。
复制构造函数:
当我们没有定义复制构造函数时,编译器会对内建或派生的data member实行拷贝,但是并不会拷贝其中的member class object,而是以递归的方式实行memberwise initialization。
总之,自己生成的复制构造函数会使内建成员获得相应的对应的值。
这段话显示出,当我们的类中含有reference或const成员时,不能期望编译器帮我们合成赋值操作符。因为这两种成员不允许重新赋值,而编译器默认的行为也就是直接cpy,所以不行。所以我们必须定义自己的copy函数,然后在自己定义的函数中,不对这些成员做处理就好。
当其基类含有一个private的赋值操作符时,说明其基类是禁止赋值的。所以在这种情况下,子类也是不能赋值的。
复制构造函数和赋值操作符:复制构造函数当你没有明确调用基类的构造函数时,编译器为了确保所有成员都已经经过初始化,会调用默认构造函数。但是当我们自己写赋值操作符时,我们如果没有自己对基类的赋值操作符进行调用的话,编译器并不会为我们进行调用,他并不企图修改其base class的成员变量,所以那些成员变量保持不变。
当我们编写一个copying函数,要确保复制所有local成员变量,调用所有base class内适当的copying函数。
虚基类的实现:可以将其放在最后,然后通过一个偏移指出来。这样就允许两个含有虚基类对象进行bitwise copy。
当我们没有声明一个构造函数时,编译器就有可能为我们合成一个,用于初始化一些拥有构造函数的基类或者自身的成员变量,如果自身或者父类含有虚函数,也需要为每一个对象生成vptr,这时也会产生一个默认构造函数 。当含有虚基类的时候,也需要有指向虚拟基类对象的指针生成,这个也是编译器在构造对象期间完成。上面所说的这些,都需要相应的代码支持,要么合成一个默认构造函数包含这些代码,在已经有声明构造函数时,编译器则会扩张已有的函数,将这些代码添加进去。
总之编译器会确保我们的对象在生成后拥有适当的值。而这些是通过扩展构造函数或生成默认构造函数实现的。
复制构造函数:
当我们没有定义复制构造函数时,编译器会对内建或派生的data member实行拷贝,但是并不会拷贝其中的member class object,而是以递归的方式实行memberwise initialization。
总之,自己生成的复制构造函数会使内建成员获得相应的对应的值。
这段话显示出,当我们的类中含有reference或const成员时,不能期望编译器帮我们合成赋值操作符。因为这两种成员不允许重新赋值,而编译器默认的行为也就是直接cpy,所以不行。所以我们必须定义自己的copy函数,然后在自己定义的函数中,不对这些成员做处理就好。
当其基类含有一个private的赋值操作符时,说明其基类是禁止赋值的。所以在这种情况下,子类也是不能赋值的。
复制构造函数和赋值操作符:复制构造函数当你没有明确调用基类的构造函数时,编译器为了确保所有成员都已经经过初始化,会调用默认构造函数。但是当我们自己写赋值操作符时,我们如果没有自己对基类的赋值操作符进行调用的话,编译器并不会为我们进行调用,他并不企图修改其base class的成员变量,所以那些成员变量保持不变。
当我们编写一个copying函数,要确保复制所有local成员变量,调用所有base class内适当的copying函数。
虚基类的实现:可以将其放在最后,然后通过一个偏移指出来。这样就允许两个含有虚基类对象进行bitwise copy。
相关文章推荐
- c++调用c程序
- c语言归并排序(poj2299)《学习记录》
- bkwin设置文本控件为多行模式
- 【C++11】新特性——auto的使用
- C++关键字
- C++ 并发消息队列
- c语言快排(快速排序)poj2388《学习记录》
- PAT (Basic Level) Practise (中文)1027. 打印沙漏(20) C语言
- 两道基础线段树简解:HDU 1166 敌兵布阵,HDU 1754 I Hate it
- 【C++ Primer每天刷牙】一间 迭代器
- 值得推荐的C/C++框架和库
- C++ 三阶魔方还原
- C++ 虚函数表解析
- UVa10391 string字符串处理
- Effective C++ -- 继承和面向对象设计
- C语言总结
- CURL断点续传
- C++ Primer Plus 第6版 中文版随书笔记
- HDU 2845 Beans
- C++线程池