【问题标题】:display the values of area for inherited classes显示继承类的区域值
【发布时间】:2017-01-26 04:54:08
【问题描述】:

在下面的代码中,我如何显示矩形和三角形的区域。目前我只能打印字符串,但会返回该区域。那么如何打印函数的返回值。我应该在代码中更改什么,请帮助。

class Shape {
   protected:
      int width, height;

   public:
      Shape( int a = 0, int b = 0) {
         width = a;
         height = b;
      }

      virtual int area() {
         cout << "Parent class area :" <<endl;
         return 0;
      }
};

class Rectangle: public Shape {
   public:
      Rectangle( int a = 0, int b = 0):Shape(a, b) { }
      int area () {
         cout << "Rectangle class area :" <<endl;
         return (width * height);
      }
};

class Triangle: public Shape{
   public:
      Triangle( int a = 0, int b = 0):Shape(a, b) { }
      int area () {
         cout << "Triangle class area :" <<endl;
         return (width * height / 2);
      }
};

// Main function for the program
int main( ) {
   Shape *shape;
   Rectangle rec(10,7);
   Triangle  tri(10,5);

   // store the address of Rectangle
   shape = &rec;

   // call rectangle area.
   shape->area();

   // store the address of Triangle
   shape = &tri;

   // call triangle area.
   shape->area();

   return 0;
}

【问题讨论】:

  • 您没有打印出任何结果。您只是将它们归还,而不是将它们分配给任何东西,因此它们会丢失。
  • 没错。在方法area 中打印字符串通常是个坏主意。你想要的大概是std::cout &lt;&lt; shape-&gt;area() &lt;&lt; std::endl;

标签: c++ polymorphism virtual-functions


【解决方案1】:

改变区域功能如下:

int Rectangle::area() {
    int ret = width * height;
    cout << "Rectangle class area : " << ret << endl;
    return ret;
}

int Triangle::area() {
    int ret = width * height / 2;
    cout << "Triangle class area :" << ret << endl;
    return ret;
}

【讨论】:

    猜你喜欢
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多