曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 2365|回复: 0
打印 上一主题 下一主题

抽象基类与纯虚函数

[复制链接]

716

主题

734

帖子

2946

积分

超级版主

Rank: 9Rank: 9Rank: 9

积分
2946
跳转到指定楼层
楼主
发表于 2013-11-18 00:18:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
抽象基类简称为 ABC ( abstract base class )。它将要派生出来的类的共性抽象出来,并它们放到一个 ABC 中,以后就可以从该 ABC 派生出具体的类来。比如对于椭圆和圆,尽管圆是一种特殊的椭圆,但一般不会用椭圆作为基类,然后派生出圆这个类,因为这比较笨拙。例如,对于圆,只需要一个半径就可以描述其大小和形状;而椭圆,则需要长半轴,短半轴这些参数。虽然圆的构造函数可以通过将同一个值赋值给椭圆的长半轴和短半轴,以形成一个圆,但这将造成信息冗余,另外对于椭圆的一些计算方法,对圆来说也没有什么实际意义。一种解决方法,就是将圆和椭圆的共性抽象出,放在一个 ABC 中,接着就可以从这个 ABC 里派生出椭圆类和圆类,并为每个类添加所需的成员。
ABC 是一种包含纯虚函数的基类,不能用这种基类直接创建对象;也就是包含纯虚函数的类只用作基类。

要成为真正的 ABC,必须至少包含一个纯虚函数,纯虚函数是这样定义的:
virtual type func_name (parameter-list) = 0;

=0 使虚函数成为了纯虚函数,也指出了类是一个抽象基类,在类中可以不定义 func_name() 函数。

总之,ABC 描述的是至少使用一个纯虚函数接口,从 ABC 派生出的类将根据派生类的具体特征,使用常规虚函数来实现这种接口。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-17 22:26 , Processed in 0.077299 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表