c++ - 为什么我的虚函数没有赋值?
问题描述
我正在尝试使用虚函数来计算矩形和三角形的面积,如下所示:-
#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 作为两个形状的面积。我认为宽度和高度的值没有在三角形和矩形类中分配。有人能告诉我哪里出错了吗?
解决方案
问题是宽度和高度分配给shapeObj
变量
Shape shapeObj;
shapeObj.get();
但是您正在使用trObj
和rectObj
变量来计算面积。
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 并在您的类中使用参数和返回值) .
推荐阅读
- swift - Swift:在另一个 switch 语句中重构 switch 语句
- python - 运行时如何更改 LightGBM 参数?
- javascript - 用同一行开头的匹配替换一行上的所有斜杠
- java - spring boot+netflix zuul 应用程序给出 java.lang.ClassNotFoundException: com.netflix.zuul.monitoring.CounterFactory
- css - Streamlabs 自定义 CSS 事件列表 - 为新条目添加延迟
- javascript - 当我添加计时器功能时,它不会画出我的“点”
- javascript - 在 Wtform 中应用 JQuery 在 Flask 中动态执行添加输入字段
- cython - 如何使用 Cython 创建 python 可执行文件?(分段故障)
- angular - Angular 生产构建错误为什么我得到 ./src/app/app.module.ngfactory.js
- python - django中用户注册时如何连接用户和组