跟着米sir学编程
//拷贝构造函数的自动调用
#include <iostream>
using namespace std;
class Point{
private:
int x,y;
public:
Point(int a=0,int b=0) //带默认参数的构造函数
{
x=a;
y=b;
}
/*
Point(Point &p){ //拷贝构造函数(已经存在一个对象p)
x=p.x;
y=p.y;
}
*/
int getX(){ //成员函数,获取x的坐标
return x;
}
int getY(){
return y;
}
};
void func1(Point p){ //对象作为参数
cout<<p.getX()<<','<<p.getY()<<endl;
}
Point func2(){ //对象作为返回值
Point p(100,200);
return p;
}
int main(){
Point p1(10,20); //自动调用构造函数,初始化对象
func1(p1); //自动调用拷贝函数
Point p2; //自动调用构造函数(用默认参数进行初始化)
func1(p2); //调用拷贝函数
p2 = func2(); //调用拷贝函数
func1(p2);
system("pause");
return 0;
}
/*
问题说明:
1.拷贝函数的作用,可以不用拷贝函数吗?
ans:
如果在定义类时,不定义拷贝函数,编译器会自动为类添加一个默认的拷贝构造函数,但是,
默认的拷贝只是浅拷贝的工作方式,即只进行二进制内存空间上的数据简单复制,不为数据成员分配空间内存。
浅拷贝只能完成基本类型的拷贝,若类中含有指针类型的数据成员(需要为成员动态内存空间),浅拷贝就可能造成危险,
因为有可能两个对象的指针指向同一个内存区域;
自定义的拷贝深拷贝,可以动态分配内存空间。
*/