这样一段代码,输出结果是 A B ~B ~A ~A
分析如下:
1.A a;构造一个对象a,调用A类的无参构造函数,输出A
2.B b(a); 执行到构造函数初始化列表 B(A &a):_a(a),相当于直接调用拷贝构造函数来初始化(ps: 当一个对象需要通过另外一个对象进行初始化时,会调用拷贝构造,但是由于类A没有显式声明拷贝构造函数,系统会生成默认拷贝构造函数,只进行位拷贝)
所以不会调用A()构造函数,此时无输出。继续构造则输出 B
析构顺序与构造顺序完全逆序,为~B ~A ~A
若改为这样
这里B的构造函数被改为
B(A &a)
{
printf(" B ");
_a=a;
}
结果为 A A B ~B ~A ~A
分析_a=a;这一步,此时是先构造一个A _a对象(会输出 A),然后再执行_a=a(由于没有重载A类的=运算符,直接进行位拷贝)
为何这个=号不会调用拷贝构造呢,因为此时不是对_a进行初始化,而是普通的赋值操作。
那么什么是初始化,什么又是赋值呢?
可以阅读下此博客:
http://blog.csdn.net/lzcx/archive/2006/03/10/620790.aspx
分享到:
相关推荐
C++拷贝构造与运算符C++拷贝构造与运算符C++拷贝构造与运算符C++拷贝构造与运算符
1. 设计一个类SavingsAccount,定义一个静态数据成员记录存款的年利率(rate) 2. 参考附件资料《拷贝构造函数的调用》,创建一个包含double*的类 3. 建立类RationalNumber(分数类),使其具有如下的功能:
本文主要介绍了拷贝构造函数和赋值运算符的区别,以及在什么时候调用拷贝构造函数、什么情况下调用赋值运算符。最后,简单的分析了下深拷贝和浅拷贝的问题。有需要的朋友可以看下
C++ 拷贝构造函数 赋值构造函数 解释
C++简单类的实现,包括构造函数,析构函数以及拷贝构造函数
C++类对象的拷贝构造函数 C++类对象的拷贝构造函数 C++类对象的拷贝构造函数 C++类对象的拷贝构造函数 C++类对象的拷贝构造函数 C++类对象的拷贝构造函数
C++拷贝构造函数和赋值操作 拷贝构造函数对同一个对象来说只会调用一次,而且是在对象构造时调用。此时对象本身还没有构造,无需要去释放自己的一些资源。而赋值操作可能会调用多次,你在拷贝之前要释放自己的一些...
全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚...
c++之十引用和拷贝构造函数c++之十引用和拷贝构造函数c++之十引用和拷贝构造函数c++之十引用和拷贝构造函数
逻辑运算先掌握各种运算,注意运算符的级别比较,做题是要细心。
初学者入门实例,看懂后,初学者能够对拷贝构造函数有一个清楚的了解,这是我自己的经验哈
c++基本数据类型、运算符和表达式 ppt课件
拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象。 复制对象把它作为参数传递给...
练习对字符串的常用操作,进而加深对类的多态...进一步熟悉掌握对类的构造函数重载,拷贝构造的使用 目录: 程序代码实现部分: p2----p6 实验结果部分: P7 实验中遇到问题及解决方法: P7----P9 实验心得: P9
c++学习之动态内存运算符的使用方法和源代码用例,供c++初学者使用
C++规定与类同名的函数就是拷贝构造函数 默认拷贝构造函数 在类定义中如果没有提供自己的拷贝构造函数,则C++提供一个默认的构造函数,其拷贝策略是逐个成员依次拷贝。 深拷贝和浅拷贝 默认拷贝构造函数均是浅拷贝 ...
(1)定义Point类,有坐标_x,_y两个成员变量;...(3)对实验二中的people类重载“==”运算符和“=”运算符,“==”运算符判断两个people类对象的id属性是否相等;“=”运算符实现people类对象的赋值操作。
C++ 上课/复习ppt运算符重载.pptx
这个是使用C++是实现的矩阵基本运算,使用了运算符重载技术和动态生成数组技术!
c++拷贝构造函数(深拷贝,浅拷贝)详解.pdf