在抽象类中添加纯虚函数——错误?

来源:百度知道 编辑:UC知道 时间:2024/07/04 22:54:13
下面的代码是计算圆和矩形的面积。定义了一个抽象类(虽然形式上不是,但在功能上是)的Shape类,并从中派生出了Circle类和Rectangle类。编译和功能实现都没有问题。
但是,当我想把Shape类定义为一个(真正的)抽象类,进而将其成员函数定义为纯虚函数时,问题出现了。
比如我将Shape类中的
virtual void SetRadius(double) {}

改写成
virtual void SetRadius(double)=0;

就不能通过编译。
想了很久都不明白,极度郁闷中……
还望高手指教!

#include <iostream>
using namespace std;

class Shape
{
public:
Shape() {}
virtual void SetRadius(double) {}
virtual void SetLength(double) {}
virtual void SetWidth(double) {}
virtual ~Shape() {}
virtual double GetArea() const {return -1;}
private:
};

class Circle: virtual public Shape
{
public:
Circle() {}
Circle(double radius):itsRadius(radius) {}
~Circle() {}
void SetRadius(double radius) {itsRadius=radius;}
double GetArea() const { return 3.14 * itsRadius * itsRadius ;}
private:
double

想把Shape类定义为一个(真正的)抽象类,也就是它拥有(真正的)虚函数。
那么它的派生类,都必须实现这个虚函数。

将Shape类中的
virtual void SetRadius(double) {}

改写成
virtual void SetRadius(double)=0;

必须在类Circle和类Rectangle中都实现SetRadius()这个函数
而你的代码中Rectangle是没有实现这个函数的,所以会出错
实现一下就行了,哪怕它是空函数

纯虚类不可以有不带参数的构造函数(默认构造函数)

你这个是伪代码把
不是C 啊