#include
using namespace std;
class person
{
public:
person()
{
}
person(int a)
{
m_age=new int(a);
}
person& operator=(person &p)
{
if (m_age!=NULL)
{
delete m_age;
m_age=NULL;
}
m_age=new int(*p.m_age);
return *this;
}
~person()
{
if(m_age!=NULL)
{
delete m_age;
m_age=NULL;
}
}
int *m_age;
};
int main()
{
person p1(10);
person p2; //从这行开始 为什么这边我不调用有参构造函数来定义这个对象,这个结果就执行不了
//接着我尝试过在person p2 和 p3的下方重新开辟堆区给p2和p3的 int* m_age进行初始化
//随后又进行delete操作结果也还是没有执行,没有执行我想要的重构‘=’号后输出的结果。
//第二点就是我不写这个默认构造函数编译都过不了,不是说 有参构造函数写了就可以不写
默认构造函数了嘛。
person p3;
p3=p2=p1;
cout<<*p3.m_age<<endl;
system("pause");
return 0;
}
不是说 有参构造函数写了就可以不写默认构造函数了嘛。
==这个说法不全对。当有有参构造函数时,你可以不写默认构造函数,但你也不能写person p2这样的类对象定义。
因为person p2定义类对象会触发无参构造函数,也就是默认构造函数,这时候你必须显式的写一个默认构造函数。
当类没有显式地先任何构造函数的时候,该类会自动有一个默认无参构造函数;但当显式定义了构造函数后,就不再拥有默认构造函数。