高级多态(二):纯虚函数与抽象数据类型(ADT)

本文探讨了如何通过定义抽象数据类型(ADT)和使用纯虚函数来创建图形类(如矩形、圆形、椭圆)的通用接口,实现了抽象类Shape,并展示了如何在子类中实现特定的绘图和获取面积功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当你要创建几个类,分别表示矩形,圆形,椭圆形等图形时,每一个类都会去实现获取面积(getArea()),绘制(draw())等通用接口,因此想到了继承。

我们可以定义一个形状类Shape,但是Shape并不是一个实体,仅仅是抽象出来的概念,您也不想去创建Shape的对象,仅仅为了预定义同类的接口而已。

此时就需要用到纯虚函数,Shape也被称为抽象数据类型ADT(Abstract Data Type)。

如果子类继承自ADT类,子类必须实现基类的所有纯虚函数。

class Shape
{
public:
	Shape(){};
	virtual ~Shape(){};
	virtual void draw() = 0; //子类必须实现该方法
	virtual void getArea() = 0;//子类必须实现该方法

private:

};
class Rectangle : public Shape
{
public:
	Rectangle(){};
	~Rectangle(){};
	void draw(){ cout << "Rectangle draw..." << endl; }
	void getArea(){ cout << "Rectangle getArea..." << endl; }
private:

};
class Circle : public Shape
{
public:
	Circle(){};
	~Circle(){};
	void draw(){ cout << "Circle draw..." << endl; }
	void getArea(){ cout << "Circle getArea..." << endl; }
private:

};



int _tmain(int argc, _TCHAR* argv[])
{
	//Shape shape;//error 不能对抽象数据类型(ADT)创建实例
	Rectangle rectangle;
	rectangle.getArea();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值