网上也有许多介绍,但我总觉得不能一针见血,根据自己工作实际中用到的,才知道有些时候真的是需要抽象类
先说一种场景:
A设计了一项功能他把此功能封装成一个类,以类的方式提供,他要把这项功能提供给B、C,我们理所当然的想到他会把源码或者编译成的
库+h文件给BC。
现在在修改一下这个场景:如果 ABC做的是同一个项目,为了保证代码不重,方便维护。这样就不能再使用上面的方法了,只能将头文件提供
给BC,而且这个头文件要做成一个抽象类,这样BC才能编译通过,或者还有一种方法,将.h+导入库提供给BC。但哪种方法更好一目了解。
为什么只用提供一个抽象类(.h文件)就可以了呢?
抽象类的最大特点就是有纯虚函数,纯虚函数的意义就是你可以把它当做一个已经有实现了的函数,而不只是一个函数声明。这样,BC在自
己的模块中就可以使用这个纯虚类来进行编译而不会报错(对!只需要包含这个抽象类的.h文件,不需要什么cpp文件),但如果是一个普通
类,如果我们只包含了它的声明,那么在编译的时候肯定会报错,因为编译器会认为你忘记实现。而抽象类由于不能自己实例化,只能做指引
或者引用,所以编译器会认为你在使用的时候一定是引用了外部已经实现了的子类,所以不会报错。
也就是说如果没有抽象类,我们无法将别人提供的接口拿来编译,只能将别人的源码或者库都拿来。
这也就是大家所说的接口与实现分离。
C++为什么设计抽象类?
最新推荐文章于 2024-12-09 21:26:21 发布