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 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器