一支彩色铅笔 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 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改
  • ¥15 Windows 系统cmd后提示“加载用户设置时遇到错误”
  • ¥50 vue router 动态路由问题
  • ¥15 关于#.net#的问题:End Function
  • ¥15 无法import pycausal
  • ¥15 weditor无法连接模拟器Local server not started, start with?
  • ¥20 6-3 String类定义