拷贝构造函数使用的时机有:
1:类的赋值
2:类做为函数的形参而不使用引用时
3:类做为函数的返回值
#include<iostream>
using namespace std;
class MyClass06A
{
//有默认的拷贝构造函数
public:
void show()
{
cout << "x:" << x << " y:" << y << endl;
}
private:
int x=10;
int y=20;
};
void main06()
{
MyClass06A my1;
MyClass06A my2(my1);
my2.show();
cin.get();
}
class MyClass
{
public:
MyClass() = default;
MyClass(const MyClass &my)
{
//重载了默认的拷贝构造函数
cout << "拷贝构造函数被调用..." << endl;
//如果重载了拷贝构造函数,则要自己手动给变量赋值
x = my.x;
y = my.y;
}
public:
void show()
{
cout << "x:" << x << " y:" << y << endl;
}
int x;
int y;
};
//调用拷贝构造函数,函数参数有副本机制,一般当类做为参数传递时,使用引用这样可以减少对内存的使用
void show(MyClass my)
{
cout << "show" << endl;
}
void showit(MyClass &my)
{
cout << "showit" << endl;
}
//函数的返回值有副本机制,当返回为类时会调用拷贝构造函数,还要看编译器有没有优化....
MyClass get()
{
MyClass my;
my.x = 10;
my.y = 20;
cout << "x:" << my.x << endl;
return my;
}
void main()
{
//MyClass my1;
//my1.x = 11;
//my1.y = 22;
//MyClass my2(my1);
//my2.show();
//类做为函数参数时,调用拷贝构造函数
/*MyClass my1;
show(my1);*/
/*MyClass my1;
showit(my1);*/
MyClass my;
MyClass my1 = get(); //函数返回值有副本机制
cin.get();
}