首页 > 解决方案 > 为什么我的虚函数没有赋值?

问题描述

我正在尝试使用虚函数来计算矩形和三角形的面积,如下所示:-

#include<iostream>
using namespace std;

class Shape{
   public:
   int width;
   int height;
   void get(){
       cin>>width;
       cin>>height;
   }

   virtual void area(){
       cout<<"Calculates area";
   }
};

class Triangle:public Shape{

  void area(){
      int a = height*width/2;
      cout<<a<<endl;
  }
};

class Rectangle:public Shape{

  void area(){
      int a = height*width;
      cout<<a<<endl;
  }
};





int main(){
    Shape shapeObj;
    shapeObj.get();

    Shape *ptr;
    Triangle trObj;
    Rectangle rectObj;

    ptr=&trObj;
    ptr->area();

    ptr=&rectObj;
    ptr->area();
}

但是我的程序返回 0 作为两个形状的面积。我认为宽度和高度的值没有在三角形和矩形类中分配。有人能告诉我哪里出错了吗?

标签: c++functionvirtual

解决方案


问题是宽度和高度分配给shapeObj变量

Shape shapeObj;
shapeObj.get();

但是您正在使用trObjrectObj变量来计算面积。

Triangle trObj;
Rectangle rectObj;
ptr=&trObj;
ptr->area();
ptr=&rectObj;
ptr->area();

试试这个

int main()
{
    Triangle trObj;
    trObj.get();
    Shape* ptr=&trObj;
    ptr->area();

    Rectangle rectObj;
    rectObj.get();
    ptr=&rectObj;
    ptr->area();
}

当然,因为你有两个变量并且调用get了两次,所以这段代码会要求宽度和高度两次。如果这不是您想要的,那么请仔细考虑如何在该程序中执行 I/O,以及如何更好地设计它(提示:在 main 中执行 I/O 并在您的类中使用参数和返回值) .


推荐阅读