为什么我的虚函数不赋值?

Why is my virtual function not assigning values?

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

#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 作为两个形状的面积。我认为三角形和矩形中没有分配宽度和高度的值class.Can有人告诉我哪里错了吗?

问题是宽度和高度赋给了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 并使用参数和 return 值在你的 类).