gpt4 book ai didi

c++ - 分配不同类别的对象时,分配未给出预期结果

转载 作者:搜寻专家 更新时间:2023-10-31 02:06:25 25 4
gpt4 key购买 nike

在下面的代码片段中,我分配了一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com