一支彩色铅笔 2022-03-29 19:57 采纳率: 100%
浏览 21
已结题

重构’=‘号时碰到构造函数的问题

#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;

}

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-03-29 20:08
    关注

    不是说 有参构造函数写了就可以不写默认构造函数了嘛。
    ==这个说法不全对。当有有参构造函数时,你可以不写默认构造函数,但你也不能写person p2这样的类对象定义。
    因为person p2定义类对象会触发无参构造函数,也就是默认构造函数,这时候你必须显式的写一个默认构造函数。
    当类没有显式地先任何构造函数的时候,该类会自动有一个默认无参构造函数;但当显式定义了构造函数后,就不再拥有默认构造函数。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月6日
  • 已采纳回答 3月29日
  • 创建了问题 3月29日

悬赏问题

  • ¥15 HFSS设计小型化180度耦合器
  • ¥15 使用CInternetSession,CHttpFile读取网页文件时有些电脑上会卡住怎么办?
  • ¥15 水下机器人的半物理仿真研究
  • ¥15 微服务假死,一段时间后自动恢复,如何排查处理
  • ¥50 webrtc-streamer TCP rtsp
  • ¥15 cplex运行后参数报错是为什么
  • ¥15 之前不小心删了pycharm的文件,后面重新安装之后软件打不开了
  • ¥15 vue3获取动态宽度,刷新后动态宽度值为0
  • ¥15 升腾威讯云桌面V2.0.0摄像头问题
  • ¥15 关于Python的会计设计