C++:已经在派生类中重定义了抽象类中的纯虚函数,为什么还不让我用派生类定义对象!?

完整程序如下,在main函数中用派生类定义对象,编译时提示在派生类中,printArea()依然是纯虚函数,三个派生类都如此,为毛啊~~~~#include<iostre... 完整程序如下,在main函数中用派生类定义对象,编译时提示在派生类中,printArea()依然是纯虚函数,三个派生类都如此,为毛啊~~~~
#include <iostream>
#include <cmath>

using namespace std;
const float Pi=3.14;

class Shape
{
public:
Shape(){}
virtual void printArea() const = 0;
};

class Circle : public Shape
{
public:
Circle()
{
radius=0;
}
Circle(float r)
{
radius=r;
}
virtual void printArea(Circle &) const;
private:
float radius;
};

void Circle::printArea(Circle &c) const
{
cout << "Circle Area:" << endl;
cout << Pi*c.radius*c.radius << endl;
}

class Rectangle : public Shape
{
public:
Rectangle()
{
length=0;
width=0;
}
Rectangle(float l,float w)
{
length=l;
width=w;
}
virtual void printArea(Rectangle &) const;
private:
float length;
float width;
};

void Rectangle::printArea(Rectangle &r) const
{
cout << "Rectangle Area:" << endl;
cout << length*width << endl;
}

class Triangle : public Shape
{
public:
Triangle()
{
sideA=0;
sideB=0;
sideC=0;
}
Triangle(float a,float b,float c)
{
if(((a+b)<c)||((a+c)<b)||((c+b)<a))
return;
sideA=a;
sideB=b;
sideC=c;
}
virtual void printArea(Triangle &) const;
private:
float sideA;
float sideB;
float sideC;
};

void Triangle::printArea(Triangle &t) const
{
if(((t.sideA+t.sideB)<t.sideC)||((t.sideA+t.sideC)<t.sideB)||((t.sideC+t.sideB)<t.sideA))
{
float temp=(t.sideA+t.sideB+t.sideC)/2;
float s=0;
s=sqrt(temp*(temp-t.sideA)*(temp-t.sideB)*(temp-t.sideC));
cout << "Triangle Area:" << endl;
cout << s << endl;
}
else
cout << "Those 3 sides cannot creat a triangle." << endl;
}

int main(void)
{
Shape *p=NULL;
Circle circle(2);
Rectangle rectangle(3,4);
Triangle triangle(3,4,5);
p=&circle;
p->printArea();
p=&rectangle;
p->printArea();
p=▵
p->printArea();
return 0;
}
明白了。。。。派生类中添加了参数,和抽象类中的函数已经不是同一个了。。。
展开
 我来答
chiconysun
2012-02-03 · TA获得超过2.2万个赞
知道大有可为答主
回答量:5410
采纳率:92%
帮助的人:2606万
展开全部
抽象类中的纯虚函数为:void printArea() const
但是派生类中的虚函数为:void printArea(Circle &) const、void printArea(Rectangle &) const、void printArea(Triangle &) const
这些派生类中的函数与抽象类中纯虚函数只是重名,但是并不是一样的参数,当然编译程序并不认为派生类中重写了这个纯虚函数
更何况你的main函数中调用的都是这个纯虚函数

改的方法有很多,一种是去掉所有派生类的参数,派生类实现该函数时,就只有this可以操纵了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式