【发布时间】:2018-05-10 09:33:42
【问题描述】:
在下面的代码 sn-p 中,我通过赋值运算符将 Box 类型的对象分配给 Circle 类型的对象,但我无法得到预期的结果。
当前执行结果:
圆=6
盒子=0
预期结果:
圆=6
框=0.7
按照下面的代码 sn-p,赋值运算符负责初始化 Box 对象,以便可以将其分配给 Circle 对象。初始化后,Circle 类函数getAreaBox(Circle 类的成员)将调用getAreabox(Box 类的成员)以获取Circle 类构造函数中当前设置的值。看起来赋值运算符内部没有进行正确的初始化,因此getAreabox 函数没有返回预期值。
#include <iostream>
using namespace std;
class Box
{
private:
double area;
public:
Box(double areaval=0.0)
{
area=areaval;
}
double getAreabox() const
{
return area;
}
};
class Circle
{
private:
int area;
Box *box;
public:
Circle(int areaval=0,double boxval=0.0):area(areaval)
{
box= new Box(boxval);
}
const Circle& operator =(const Box& obj)
{
if(&obj!=box)
{
delete box;
box= new Box (obj);
}
return *this;
}
int getAreaCircle()
{
return area;
}
double getAreaBox()
{
double val=box->getAreabox();
return val;
}
~Circle(){delete box;}
};
int main() {
Box box;
Circle circle(6,0.7);
cout<<"circle="<<circle.getAreaCircle()<<endl;
circle=box;
cout<<"box="<<circle.getAreaBox()<<endl;
return 0;
}
【问题讨论】:
-
因此,当您将
Box box;替换为Box box(0.8);时,您会注意到它打印出box=0.8您的赋值运算符似乎完全按照您的要求进行操作 -
我认为你应该澄清为什么你认为预期的输出是 box=0;但在您这样做之前,请使用调试器逐步完成所有操作。
-
发帖时请注意问题预览;代码缩进一团糟。
-
代码通过 ctrl+k 缩进
-
不幸的是,快捷方式并不神奇,尤其是不能很好地与选项卡配合使用。请随时查看问题预览。
标签: c++ operator-keyword assignment-operator