搞懂C++抽象类

​作者:良知犹存

转载授权以及围观:欢迎添加微信:Allen-Iverson-me-LYN

    抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

    通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。

    抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

 

一、抽象类出现的标志

   之我们讲到虚拟继承的使用,在那篇文章中介绍了虚拟函数,用virtual标记的函数,C++的虚拟继承(基础)没有看到的朋友,可以看这篇文章了解一下。

    一个虚函数等于0,则此虚函数为纯虚函数。如果一个类有纯虚函数则这样的类就是抽象类。

 

示例如下:

class Human {private:       inta;   int type;public:       virtualvoid eating(void) =0;/*纯虚函数*/   virtual void wearing(void)=0;   virtual void drving(void)=0;   virtual~Human() { cout<<"~Human()"<<endl; }   virtual Human* test(void) {       cout<<"Englishman test()"<<endl;       return this;       }};

 

二、引入原因

     更加方便的解决多态的问题(多重继承或者一个基类被多次继承)。解决派生的基类实体化问题,例如:我们定义一个基类是人类,通过继承基类,我们派生出英国人,中国人,美国人,如果人类这个基类是普通类,则它也会生成实体化对象,一个组成物体的元素也生成对象,这个是不被接受的。所以我们定义基类为抽象类(含有纯虚函数的类),而抽象类不能被申明为一个实体变量。

     抽象类可以作为一个接口,通过作为一个继承中的最底层类存在,定义程序框架。

 

抽象类不可以被申明为一个实体变量

int main(uint argc,char ** argv){    Human h;}

 

  

三、使用规则

    如果派生类中没有对纯虚函数进行定义,则派生类也会成为一个抽象类,也不可以被申明为实体变量,需要再次派生一个子类,直至将基类的纯虚函数定义。派生类定义纯虚函数的时候可以写virtual 也可以不写。

    非类的成员函数不能定义为虚函数,类的成员函数中静态成员函数和构造函数也不能定义为虚函数,但可以将析构函数定义为虚函数

 

四、使用纯虚函数优势

  1. 减少代码量

  2. 在继承基类的时候,编译器阻止程序生成实例化对象

 

五、进一步学习

    多人编写程序的时候,一共分为两种,一种是应用编程,根据提供的类进行使用;一种是提供类,进行类编程。

 但是编写代码过程中由于头文件的包含,类文件修改导致应用程序部分需要重新编译,所以需要一个相对固定的包含的头文件包含相应函数(抽象类界面或者叫接口)进行编译.

 

    利用动态库的应用,我们就可以对程序的底层的类进行修改而不会影响到main中应用使用逻辑造成影响。我的.so文件关联到类的实现,编译随着类的修改而变化,而main.cpp不受类文件的修改而影响。

 

 

 

使用动态链接库,需要设置LD_LIBRARY_PATH (linux 环境变量名)

 

设置路径到当前目录,发现成功运行,

 

修改类文件再进行编译:

  

 下一篇文章再着重分析一下抽象类与接口(类)。

 

更多分享,扫码关注我

微信:Allen-Iverson-me-LYN

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御林你好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值