c++纯虚函数和抽象基类

c++面向对象编程的思想之一是可以使用继承。继承中一个重要的思想是使用抽象基类(abstract base class,ABC)。

假设我们开发一个程序,需要使用椭圆和圆两种图形。因为圆是椭圆的一种特殊情形,根据继承‘is-a’的思想,自然会想到先定义一个Eclipse类,再将Circle类继承自Eclipse类。

但这样实现有不好的地方。

椭圆中,需要表示长半轴和短半轴、angle(长轴和水平线的夹角),还可以有rotate方法将椭圆进行旋转,这些都是圆所不需要的,将圆继承自椭圆,是十分笨拙的。

一种更好的办法是,使用抽象基类(ABC),将椭圆和圆的共性部分,例如坐标x、y,共同的方法例如移动move、计算面积Area抽象出来放到一个基类shape中,再将Eclipse和Circle类分别继承shape,这样就可以使用基类指针数组同时管理Eclipse和Circle对象。

当类声明中包含纯虚函数时,不能创建该类的对象,此类称为抽象基类。

纯虚函数的声明如下(以Area为例):

virtual double Area() const =0 ;

ABC类shape的定义如下:

class Shape{
  private:
  	double x;
  	double y;
  public:
  	Shape(double x0=0,y0=0):x(x0),y(y0){}		//构造函数
  	virtual ~Shape(){}			//析构函数
  	void move(int nx,ny){x=nx;y=ny;}			//move函数
  	virtual double Area() const =0;			//纯虚函数
}

此后,就可以从Shape类派生出Eclipse类和Circle类,在各自的派生类中加入需要的属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值