构造函数和析构函数
来源:互联网 发布:无法淘宝建立私密连接 编辑:程序博客网 时间:2024/06/05 16:09
三种构造函数:
1.无参构造函数
2.有残构造函数
3.copy构造函数
析构函数
构造函数的调用方式:
1.隐式(自动调用)
2.显式(手动调用)
3.copy构造函数的几种调用时机
匿名对象的去和留
#include <iostream>using namespace std;class Test{private: int a; int b;public: Test(){//无参构造函数 a = 3; b = 5; cout << "我是构造函数,被执行了" << endl; } Test(int _a, int _b){//带参数的构造函数 a = _a; b = _b; cout << "我是带参数构造函数,被执行了" << endl; } Test(const Test &obj){//赋值构造函数(copy构造函数) a = obj.a; b = obj.b; cout << "我是拷贝构造函数,被执行了" << endl; } ~Test(){//析构函数 cout << "我是析构函数,被调用了" << endl; } void print(){ cout << "a: " << a << " b: " << b << endl; }};/* 实验1 */void stage1()//搭建一个舞台,将展示构造函数和析构函数调用的时机{ cout << "experiment 1" << endl; Test t0;//自动调用(隐式) Test t1(1, 2);//手动调用(显式) Test t2 = t1;//用另一个对象去初始化这个对象,会调用copy构造函数 Test t3; t3 = t1;//直接将一个对象赋值给另一个对象,不调用如何构造函数 //当它们的生命周期结束,编译器会对每个对象调用析构函数}/* 实验2 */void f(Test p){ p.print();}void stage2()//搭建舞台2,将展示当对象做函数参数时的运行机制机制(copy构造函数的调用时机){ cout << "experiment 2" << endl; Test b; //1.展示f()函数 f(b);//b实参去初始化形参p,这是会调用copy构造函数,将b拷贝给形参p //当局部变量p的生命周期完成时,调用p的析构函数}/* 实验3 *///结论:函数的返回值是一个元素(复杂类型的),返回的是一个新的匿名对象,所以会调用匿名对象类的copy构造函数//然后g函数中的A对象会被析构Test g(){ Test A(1, 2); return A;}void stage3(){ Test B; B = g();//用匿名对象,赋值给B对象(扶正),然后匿名对象析构,匿名对象赋给B后,立马被析构掉 //再比如 Test B1 = g();//用匿名对象初始化B1,此时c++编译器直接将匿名对象转成B1(扶正)}int main(){ stage1(); stage2(); stage3(); return 0;}
实验1:
实验2:
0 0
- 构造函数,拷贝构造函数和析构函数
- 构造函数、拷贝构造函数和析构函数
- 构造函数和析构函数
- 构造函数和析构函数
- 构造函数和析构函数
- 构造函数和析构函数
- 构造函数和析构函数
- 关于构造函数和析构函数
- 构造函数和析构函数
- 浅析构造函数和析构函数
- 构造函数和析构函数
- 浅析构造函数和析构函数
- 构造函数和析构函数
- 构造函数和析构函数
- 构造函数和析构函数
- 构造函数和析构函数
- 构造函数和析构函数
- 构造函数和析构函数
- json对象与json转换需要的maven包
- 杭电acm2674--N! Again
- QT中this application has requested the runtime 故障解决办法
- Start from today
- iOS开发:Create groups 与 Create folder references
- 构造函数和析构函数
- 数据仓库维度建模(针对多种业务的数据仓库总线结构)
- MySQL笔记-select单表查询
- C语言32个关键字总结
- tomcat中 context.xml
- 怎么玩情怀
- 百万用户级游戏服务器架构设计
- Dlib + VS2013 人脸检测,无需CMAKE
- Java解惑2