1. 赋值构造函数的四种调用场景(调用时机)
场景1:
| #include "iostream" using namespace std;
class AA { public: AA() //无参构造函数 默认构造函数 { cout<<"我是构造函数,自动被调用了"<<endl; } AA(int _a) //无参构造函数 默认构造函数 { a = _a; } AA(const AA &obj2) { cout<<"我也是构造函数,我是通过另外一个对象obj2,来初始化我自己"<<endl; a = obj2.a + 10; } ~AA() { cout<<"我是析构函数,自动被调用了"<<endl; } void getA() { printf("a:%d \n", a); } protected: private: int a; }; //单独搭建一个舞台 void ObjPlay01() { AA a1; //变量定义
//赋值构造函数的第一个应用场景 //用对象1 初始化 对象2 AA a2 = a1; //定义变量并初始化 //初始化法
a2 = a1; //用a1来=号给a2 编译器给我们提供的浅copy }
|
场景2:
| 第二个应用场景 //单独搭建一个舞台 void ObjPlay02() { AA a1(10); //变量定义
//赋值构造函数的第一个应用场景 //用对象1 初始化 对象2 AA a2(a1); //定义变量并初始化 //括号法
//a2 = a1; //用a1来=号给a2 编译器给我们提供的浅copy a2.getA(); } //注意:初始化操作 和 等号操作 是两个不同的概念 |
场景3:
| #include "iostream" using namespace std;
class Location { public: Location( int xx = 0 , int yy = 0 ) { X = xx ; Y = yy ; cout << "Constructor Object.\n" ; } Location( const Location & p ) &nbs |

本文介绍了C++中构造函数的调用规则,重点关注了默认构造函数和拷贝构造函数。深入探讨了浅拷贝和深拷贝的概念,指出浅拷贝可能导致的问题以及C++中解决这些问题的方法,强调了手动编写拷贝构造函数的重要性。同时,讨论了对象初始化列表的使用场景和注意事项,以及构造函数和析构函数的调用顺序。
最低0.47元/天 解锁文章
1054

被折叠的 条评论
为什么被折叠?



