在下面的代码片段中,我分配了一个 Box
类型的对象进入 Circle
类型的对象通过赋值运算符,但我无法得到预期的结果。
当前执行结果:
圆=6
框=0
预期结果:
圆=6
框=0.7
根据下面的代码片段,赋值运算符负责初始化 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;
}
最佳答案
请在下面的链接中查看我针对您的问题的解决方案。
http://coliru.stacked-crooked.com/a/1bfb63a8eedeefae
分辨率更新:
(1) 原始指针替换为智能指针。
(2) 将复制赋值运算符替换为 getObject 方法,以便在构造函数中获取当前设置的 Box 类对象。
(3) 您无需使用 box 对象构造函数再次设置当前值,因为它会选择在 Circle 类构造函数中设置的相同值。
(4) 不需要在 Circle 类中单独使用 double getAreaBox() 方法,因此代码也针对相同的情况进行了优化。
我希望这个解决方案能够满足您的需求。
关于c++ - 分配不同类别的对象时,分配未给出预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50269760/