一支彩色铅笔 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 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?