C++中类的构造函数和复制构造函数

代码如图一所示,输出的结果为图二,想问为什么第一行输出的是9而不是7,哪位大神能赐教下,如果可以的话,麻烦能讲下整个程序的分析思路么?感激不尽啊!!!
为什么程序输出的第一行是9而不是7,还有第二行的22...能具体讲解一下吗?

第1个回答  2017-12-15
可以看一下下面的这个例子:

有一个类的构造函数为: A(int i) : m_i(i){}

显示初始化的:
A abc(200);//显式初始化,直接调用构造函数
A a = A(1);//直接调用构造函数,没有临时对象,作用域结束时析构
A* e = new A(2);//直接调用构造函数,使用delete时析构
A d(*e);//显式初始化,调用拷贝构造函数,作用域结束时析构

隐式初始化的
A c = 0;//这是一种隐式初始化,直接调用构造函数,没有临时对象。不要看到=号就以为要用拷贝构造函数。
A b = a;//用一个对象隐式初始化另一对象,调用拷贝构造函数,作用域结束时析构

显示初始化的就是 你直接调用构造函数或拷贝构造函数,函数写什么样,你就怎么样调用。
而隐式的 就是 不是函数调用的方式,但是后面操作的依然是构造函数或拷贝构造函数,只是看起来不明显而已追问

哦哦,看懂了,但是还是不懂为什么程序输出的是9而不是7,还有第二行的22...能具体讲解一下吗?

第2个回答  2017-12-15
拷贝构造函数,是一种特殊的构造函数,它由编译器调出使用来完成有些基于同一类的其他对象的构建及初始化。其唯一的参数(对象的引用)是不可变的(const类型)。此函数常常用在函数调出使用时用户定义类型的值传递及返回。拷贝构造函数要调出使用基类的拷贝构造函数和成员函数。假如可以的话,它将用常量方式调出使用,另外,也可以用非常量方式调出使用。
相似回答