一些基础知识
#include<iostream>
using namespace std;
class Test{
public:
//Test t;
Test(int d = 0):data(d){
cout<<"Create Test Object:"<<this<<endl;
}
//Test t1(t),不写也没事,系统有默认的拷贝构造函数
Test(const Test &t){ //引用
cout<<"Copy Create Test Object:"<<this<<endl;
data = t.data;
}
/*
//系统默认的拷贝构造函数
Test(const Test &t){ //引用
data = t.data; //所有数据都会初始化
}
*/
//~t
~Test(){
cout<<"Free Test Object:"<<this<<endl;
}
private:
int data;
};
void main(){
Test t(10);
Test t1(t);
Test t2 = t1; //初始化:调用的是拷贝构造函数,而不是赋值(=左边的t2不存在,所以是初始化)
Test t3;
t3 = t2; //赋值:调用的是赋值语句(=左边的t3存在,所以是赋值)
}
什么时候会调用拷贝构造函数?
1.初始化。
2.函数里的参数是对象的时候,也会调用拷贝构造函数。追根究底还是拿对象对对象进行初始化。
void fun(Test x){
int value;
value = x.GetData();
}
void main(){
Test t1(10);
Test t2(t1);
fun(t2); //会调用一次拷贝构造函数
}
3.当函数返回值是对象。
void fun(Test x){
int value;
value = x.GetData();
Test tmp(value);
return tmp; //tmp不能返回,要产生一个临时对象,又变成对象对对象初始化,调用拷贝构造函数
}
void main(){
Test t1(10);
Test t2(t1);
fun(t2); //会调用一次拷贝构造函数
}
int getdata(int x,int y){
int sum = x + y;
return sum; //sum是不能返回的,因为它只存在于这个函数里面,其实是借助一个中间的临时变量返回值,然后再析构掉
}
int value = getdata(1,2);
版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~