C++之 抽象类和接口类


<<Effective C++>>

条款34: 区分接口继承和实现继承

抽象类(abstract class)和接口(interface)的概念是面向对象设计中常用的概念, 也是比较容易混淆的概念:

  1. 如果一个类B在语法上继承(extend)了类A, 那么在语义上类B是一个类A.

  2. 如果一个类B在语法上实现了(implement)接口I, 那么类B遵从接口I制定的协议.

  • 抽象
    使用abstract class的根本原因在于, 人们希望通过这样的方式, 表现不同层次的抽象.

  • 接口

而interface的本质是一套协议. 在程序设计的发展中, 人们又发现接口可以用来表示对行为的抽象, 不过, 这只是interface的一种用法不是其本质.

不包含成员函数

接口类中不包含成员函数

不能Delete接口

因为接口是一套协议, 一套规范, 并不是实现。 删除一个接口实力并没有

class IInterface()
{ 
	Public: Virtual ~IInterface(){};} 
Class ClassImpl : public IInterface 
{} 

Int main() 
{ 
	IInterface* pInterface = new ClassImpl();delete pInterface; 
}

C++接口的表现

class Shpage
{
public:
	virtual void draw() const = 0;					//pure vistual
	virtual void error(const std::string &msg);     //impure visual
	void objectID() const;							//none visual
	...	
}; 
  • 声明一个纯虚函数(pure visual)的目的就是为了让派生类只继承函数接口,即接口继承。
  • 声明一个非纯虚函数(impure visual)的目的是为了让派生类继承函数接口和缺省实现。
  • 声明一个非虚函数(non visual)的目的是为了让派生类继承函数接口和一份强制实现。

一篇非常好的参考文章

C++ 抽象类与接口类的区别机应用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值