C++ 为什么我的虚拟函数不赋值?
我正在尝试使用虚函数来计算矩形和三角形的面积,如下所示:-C++ 为什么我的虚拟函数不赋值?,c++,function,virtual,C++,Function,Virtual,我正在尝试使用虚函数来计算矩形和三角形的面积,如下所示:- #include<iostream> using namespace std; class Shape{ public: int width; int height; void get(){ cin>>width; cin>>height; } virtual void area(){ cout<<"Calc
#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变量 但是您正在使用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,并在类中使用参数和返回值。问题是宽度和高度被指定给shapeObj变量 但是您正在使用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,以及如何设计更好的提示:在主类中做I/O,使用C++中的参数和返回值。< /P>阅读一本好书,然后是C++编译器的文档,例如…也可以看到一些好的和好的。考虑使用。意识到这一点。启用编译器中的所有警告和调试信息,GCC使用G++WALL-WOTAL-GYES,这个错误是基本的,它应该由任何C++教程来回答。此外,学习如何使用调试器逐步完成代码将是一件非常有用的事情,可以帮助您自己解决这个问题。如果还没有,那么就把这个函数放在一边,把@john已经给出答案的main函数放在一边,派生类矩形和三角形中的面积函数应该是公共的。类默认为私有的。读一本好书,然后是C++编译器的文档,例如…也可以看到一些好的和好的。考虑使用。意识到这一点。启用编译器中的所有警告和调试信息,GCC使用G++WALL-WOTAL-GYES,这个错误是基本的,它应该由任何C++教程来回答。此外,学习如何使用调试器逐步完成代码将是一件非常有用的事情,可以帮助您自己解决这个问题。如果还没有,那么就把这个函数放在一边,把@john已经给出答案的main函数放在一边,派生类矩形和三角形中的面积函数应该是公共的。类的默认值是private。