三、C++ 复制构造函数
来源:互联网 发布:windows下svn钩子 编辑:程序博客网 时间:2024/05/22 13:23
C++ 复制构造函数
一、基本概念
只有一个参数,且为对同类对象的引用。
格式:X::X( X& )或X::X(const X &),后者能以常量对象作为参数。
如果没有定义复制构造函数,那么编译器生成默认复制构造函数。默认的复制构造函数完成复制功能。
例子:
class Complex {public : Complex(){ } Complex( const Complex & c ) { cout << “Copy Constructor called”; }};Complex c1;Complex c2(c1);//调用自己定义的复制构造函数
输出
Copy Constructor called
二、复制构造函数的三个使用场合
2.1 一个对象去初始化同类的另一个对象时
以下两种情况,复制构造函数都会被调用
Complex c2(c1); Complex c2 = c1; //初始化语句,非赋值语句
2.2 作为函数的形参
class A { public: A() { } A( A & a) { cout << "Copy constructor called" <<endl; }};void Func(A a1){ }int main(){ A a2; Func(a2); return 0;}
程序输出结果为
Copy constructor called
当类的对象作为某个方法的形参,且这个方法被调用时,该类的复制构造函数将被调用,并用于初始化这个方法中的形参。
在这个例子里面,a1是复制构造函数初始化的,初始化的时候,它所调用的复制构造函数的参数是a2。a1不一定等于a2,因为a1的值是复制构造函数初始化的,而这个复制构造函数并没有做复制的工作。
2.3 作为函数的返回值
class A{ public: int v; A(int n) { v = n; }; A( const A & a) { v = a.v; cout << "Copy constructor called" <<endl; }};A Func() { A b(4); return b; //这条语句执行完之后调用复制构造函数}int main() { cout << Func().v << endl; return 0;}
输出结果:
Copy constructor called
4
三、小结
复制构造函数:
A( A & a) { }//或:A(const A & a) { }
复制构造函数无返回值,只有一个参数,且为同类对象的引用,作用是复制一个类的对象给该类的另一个对象
复制构造函数被调用的情况有三种,分别是用一个对象去初始化另一个对象的时候、一个对象作为某个函数的形参且这个函数被调用的时候、一个对象作为某个函数的返回值且这个函数被调用的时候
0 0
- C++: 复制构造函数
- 三、C++ 复制构造函数
- C++复制构造函数及三法则
- c++-拷贝构造函数(复制构造函数)
- 复制构造函数与赋值重载(c++)
- c++primer 3/12----复制构造函数
- C++_避免调用复制构造函数
- C++(22)复制构造函数
- C++:复制构造函数___浅拷贝
- C++:复制构造函数的应用
- 【C++】This指针和复制构造函数
- 【学习C++】学习C++ -> 复制构造函数
- 【C++】拷贝构造函数之浅复制与深复制
- 构造函数 复制构造函数
- C++_浅层复制构造函数和深层复制构造函数
- 【C/C++】C++高级主题之复制构造函数
- C/C++——构造函数、复制构造函数和析构函数的执行时刻
- 三法则,合成赋值操作符,合成复制构造函数
- 【Linux】系统运行级别
- C++ Primer 第五版 部分课后题答案
- HDU_How far away ?
- (找数组中唯一出现两次的数)
- OpenCV 读取 Cifar 数据集
- 三、C++ 复制构造函数
- 使用Colseable接口封装流关闭工具类IOClose
- HDU2068
- C++实验7-最大公约和和最小公倍数
- Hibernate 双向 1 对 1 对象关系映射 —外键关联 下 ,测试 crud
- 视频加载
- laravel5.1框架下的权限控制
- 进程与线程的一个简单解释
- CC2540和CC2541区别在哪里?