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

标签 c++ operator-keyword assignment-operator

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

相关文章:

javascript - 对象属性的双重赋值导致未定义的属性

c++ - 复制构造函数和重载赋值?

c - 赋值运算符的实现

c++ - 内置mpi的自定义boost python模块?

java - 错误: bad operand types for binary operator '=='

c++ - 运算符重载 [][] 二维数组 C++

java - 通用类 - 运算符问题

c# - 当我们使用 winapis 将字符串作为参数传递时如何将 c# 字符串转换为 c++ 字符串

C++ - 对象在超出范围和 vector 时被破坏

c++ - 使用属性 warn_unused_result [-Wunused-result] 声明的警告 : ignoring return value of 'int scanf(const char*, ...)' ,