北大 C++ 3.1 复制构造函数
来源:互联网 发布:阿里云 谷歌api 编辑:程序博客网 时间:2024/06/15 17:41
复制构造函数
1.基本概念
1.1. 只有一个参数,即对同类对象的引用。
1.2. 形如 X::X(X&)或 X::X(const X&),二者选一
后者能以常量对象作为参数,前者不可以。
1.3. 如果没有定义复制构造函数,那么编译器生成默认复制构造函数。默认的复制构造函数完成复制功能。
class Complex {
private:
doublereal,imag;
};
Complex c1;
Complex c2(c1); //c2是c1的一个复制品。
1.4. 如果定义的自己的复制构造函数,则默认的复制构造函数不存在。
复制构造函数只能有一个。
#include <iostream>
using namespace std;
class Complex {
public:
doublereal,imag;
Complex(){}
Complex(constComplex & c){
real= c.real;
imag= c.imag;
cout<<"CopyConstructor Called.";
}
};
int main(){
Complexc1;
Complexc2(c1);
return0;
}
1.5不允许有形如 X::X(X)的构造函数
class CSample{
CSample(CSamplec){……. }
};
2. 复制构造函数起作用的三种情况
2.1)当用一个对象去初始化同类的另一个对象时。
Complex c2(c1);
Complexc2 = c1; // 初始化语句,非赋值语句,如果没有Complex那么就是赋值语句。
2.2)如果某函数有一个参数是类A的对象,那么该函数被调用时,类A的复制构造函数被调用。
#include <iostream>
using namespace std;
class A{
public:
A(){ }
A(A&a){
cout<<"Copyconstructor called."<<endl;
}
};
void Func(A a1){ } //这个地方形参的值不一定等于实参,如果我们自己没有写复制构造函数,那么形参和实参是一样的,是由于编译器自动生成的默认复制构造函数。
int main(){
Aa2;
Func(a2);
return0;
}
2.3) 如果函数的返回值是类A的对象时,则函数返回时,A的赋值构造函数被 调用。
#include <iostream>
using namespace std;
class A{
public:
intv;
A(intn){v=n;}
A(constA & a){
v= a.v;
cout<<"Copyconstructor called."<<endl;
}
};
A Func(){
Ab(4);
returnb; //以前学过return b肯定和b一样,但是学了复制构造函数以后,这就不一定了。
}
int main(){
class A c(2);
c= Func();
cout<<c.v<<endl;
return0;
}
这个会不会输出Copy constructor called.要看,因为这涉及到了一个返回值优化的复杂的事情。有可能能本就没有调用自己写的复制构造函数。
2.3. 为什么要自己写复制构造函数?
我们以后再说(会出现有如果不写复制构造函数的话,我们的程序及会出错。)
- 北大 C++ 3.1 复制构造函数
- C++: 复制构造函数
- c++-拷贝构造函数(复制构造函数)
- 复制构造函数与赋值重载(c++)
- c++primer 3/12----复制构造函数
- C++_避免调用复制构造函数
- C++(22)复制构造函数
- C++:复制构造函数___浅拷贝
- C++:复制构造函数的应用
- 【C++】This指针和复制构造函数
- 【学习C++】学习C++ -> 复制构造函数
- 北大 C++ 2.6 构造函数
- 【C++】拷贝构造函数之浅复制与深复制
- 构造函数 复制构造函数
- C++_浅层复制构造函数和深层复制构造函数
- 【C/C++】C++高级主题之复制构造函数
- C/C++——构造函数、复制构造函数和析构函数的执行时刻
- 深复制-复制构造函数
- 【zabbix教程六】——自定义item和trigger当内存不足10%时触发报警
- 最新博客地址
- 【Java每日一题】20170227
- java
- No result defined for action xxxAction and result input
- 北大 C++ 3.1 复制构造函数
- 模拟CloudStack的NAT实现
- 通讯录管理系统C语言课程设计
- 需求阶段如何书写Use Case
- [51nod1228][伯努利数][自然数k次幂和]序列求和
- oracle对表添加主键约束的sql语句
- Imitation- Seahorse genome
- SEO常见术语
- HDU1863 畅通工程