【C++温故】(3)类的拷贝构造函数 & =重载函数
来源:互联网 发布:大麦户2016源码 编辑:程序博客网 时间:2024/06/06 00:45
包括:拷贝构造函数、重载赋值操作符
拷贝构造函数
C++ 支持两种初始化形式:直接初始化、拷贝初始化
A x(100); // 直接初始化,调用构造函数A y = x; // 拷贝初始化,调用拷贝构造函数A z(x); // 拷贝初始化,调用拷贝构造函数
以下三种情况会调用拷贝构造函数:
- 对象以值传递的方式传入函数体
- 对象以值传递的方式从函数返回
- 对象需要通过另外一个对象进行初始化
实现形式
1)如果没有显式声明,编译器会自动生成一个默认的拷贝构造函数
默认拷贝构造函数只是实现浅拷贝,对于动态成员只会重新赋值。如对于指针,不会分配新空间。
2)显式声明
// 4种拷贝构造函数形式A(A&);A(const A& m_a);A(volatile A&);A(const volatile A&);// 参数列表后如果有其他参数,并且都有默认值也算A(A&, int a=1);
3)一个技巧
如果想要禁止对象的值传递,可以声明一个私有拷贝构造函数
赋值运算符重载函数
A m_a; // 调用构造函数A m_b = m_a; // 调用拷贝构造函数A m_c;m_c = m_a; // 调用赋值运算符重载函数
实现形式
A& operator =(const A& m_a){ if(this != &m_a){ // to do } return *this}
- 输入是类对象的引用(引用可以避免拷贝提高效率),前面用 const 修饰(避免被修改)
- 输出是被赋值者的引用
- 函数体一般先通过判断 this != &m_a 以避免自赋值
默认赋值运算符重载函数
当程序没有显式提供一个以本类或本类的引用为参数的复制运算符重载函数时,编译器会自动生成一个
- 显式提供重载函数的一个重要场景是需要深拷贝时
- 输入参数必须为本类才算
// 输入为 int ,编译器仍会提供一个默认重载函数A& operator =(const int data){}
其他
- 赋值运算符重载函数不能被继承
- 赋值运算符重载函数只能是类的非静态成员函数
阅读全文
0 0
- 【C++温故】(3)类的拷贝构造函数 & =重载函数
- <C++>14.构造函数的重载与拷贝构造函数
- 【C++】复制构造函数(拷贝构造函数)和=运算符重载使用的区别
- 浅谈c/c++中类的拷贝构造函数和重载赋值函数
- C 类对象的拷贝构造函数
- (C++)定义类的拷贝构造函数
- C++:复数类构造函数、拷贝构造、运算符重载、析构函数
- 拷贝构造函数与重载operator =
- 读书笔记:实现string类的构造函数、拷贝构造函数、析构函数、重载运算符=
- C++拷贝构造函数与重载‘=’的区别
- 类的拷贝构造函数也能重载
- 类的赋值运算符重载和拷贝构造函数
- String类的构造函数、析构函数、拷贝构造函数、赋值运算符重载
- 使用拷贝构造函数与使用重载的“=”重载函数的区别
- 拷贝构造函数,类的赋值运算符重载,深拷贝与浅拷贝
- 类的构造函数、拷贝构造函数
- 【C++】拷贝构造函数
- C++:拷贝构造函数
- Java语言编码规范(参考)
- ZXing笔记(2)—portrait ZXing,竖直扫码
- linux 内核驱动加载
- 深度学习——感知器
- 第一人称视角获得运动方向和视角的夹角
- 【C++温故】(3)类的拷贝构造函数 & =重载函数
- Navicat for MySQL破解
- C#笔记(20)新建文件夹/删除文件夹
- git工具使用
- android使用apkplug实现插件化开发
- 文件操作类:File
- iso14443协议中文版
- 前端css基础知识(2)
- FoxMail7.2网易企业邮箱设置