qq_21918325 2015-05-12 15:27 采纳率: 0%
浏览 1731

关于c++抽象类的问题,调用虚函数

#include
#include
using namespace std;
class shape
{
public:
virtual float area() const=0;
};
class circle:public shape
{
public:
circle(float r)
{
radius=r;
}
virtual float area() const
{
return 3.14159*radius*radius;
}
protected:
float radius;
};
class rectangle:public circle
{
public:
rectangle(float r,float l,float w,float h):circle(r)
{
length=l;
width=w;
height=h;
}
virtual float area()
{
return length*width*height;
}
protected:
float length;
float width;
float height;
};
class triangle:public rectangle
{
public:
triangle(float r,float l,float w,float h,float a1,float b1,float c1):rectangle(l,w,h,r)
{
a=a1;
b=b1;
c=c1;
}
virtual float area() const
{

    return sqrt(((a+b+c)/2)*(((a+b+c)/2)-a)*(((a+b+c)/2)-b)*(((a+b+c)/2)-c));
}

protected:
float a;
float b;
float c;
};
int main()
{
circle c(2);
rectangle re(1,1,1,1);
triangle t(2,4,4,5,3,4,5);
circle *p=&c;
cout<area()< p=&re;
coutarea()< p=&t;
coutarea()<<endl;

return 0;

}

程序可以运行 但是对象c和对象re调用的display()函数为什么是同一个 ?求大神帮助啊

  • 写回答

1条回答 默认 最新

  • 知常曰明 2015-05-12 21:55
    关注

    rectangle 的 area 方法缺了const,所以不认为是基类的area的重写

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog