博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
接口继承与实现继承
阅读量:5375 次
发布时间:2019-06-15

本文共 1179 字,大约阅读时间需要 3 分钟。

        所 谓接口继承,就是派生类只继承函数的接口,也就是声明;而实现继承,就是派生类同时继承函数的接口和实现。
我们都很清楚C++中有几个基本的概念,虚函数、纯虚函数、非虚函数。
虚函数:
虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。——MSDN

虚函数用来表现基类和派生类的成员函数之间的一种关系. 

虚函数的定义在基类中进行,在需要定义为虚函数的成员函数的声明前冠以关键字 virtual. 
基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义. 
在派生类中重新定义时,其函数原型,包括返回类型,函数名,参数个数,参数类型及参数的先后顺序,都必须与基类中的原型完全相同. 
虚函数是重载的一种表现形式,是一种动态的重载方式.

纯虚函数:
纯虚函数在基类中没有定义,它们被初始化为0。 
任何用纯虚函数派生的类,都要自己提供该函数的具体实现。 
定义纯虚函数 
virtual void fun(void) = 0;
非虚函数:
一般成员函数,无virtual关键字修饰。
 
至于为什么要定义这些函数,我们可以将虚函数、纯虚函数和非虚函数的功能与接口继承与实现继承联系起来:
声明一个纯虚函数(
pure virtual
)的目的是为了让派生类只继承函数接口,也就是上面说的接口继承。
纯虚函数一般是在不方便具体实现此函数的情况下使用。也就是说基类无法为继承类规定一个统一的缺省操作,但继承类又必须含有这个函数接口,并对其分别实现。但是,在C++中,我们是可以为纯虚函数提供定义的,只不过这种定义对继承类来说没有特定的意义。因为继承类仍然要根据各自需要实现函数。
通俗说,纯虚函数就是要求其继承类必须含有该函数接口,并对其进行实现。是对继承类的一种接口实现要求,但并不提供缺省操作,各个继承类必须分别实现自己的操作。
声明非纯虚函数(
impure virtual
)的目的是让继承类继承该函数的接口和缺省实现。
与纯虚函数唯一的不同就是其为继承类提供了缺省操作,继承类可以不实现自己的操作而采用基类提供的默认操作。
声明非虚函数(
non-virtual
)的目的是为了令继承类继承函数接口及一份强制性实现。
相对于虚函数来说,非虚函数对继承类要求的更为严格,继承类不仅要继承函数接口,而且也要继承函数实现。也就是为继承类定义了一种行为。
 
总结:
纯虚函数:
要求继承类必须含有某个接口,并对接口函数实现。
虚函数:继承类必须含有某个接口,可以自己实现,也可以不实现,而采用基类定义的缺省实现。
非虚函数:继承类必须含有某个接口,必须使用基类的实现。

转载于:https://www.cnblogs.com/wsw-seu/p/8075971.html

你可能感兴趣的文章
我的PHP学习之路
查看>>
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>
hdu3307 欧拉函数
查看>>
Spring Bean InitializingBean和DisposableBean实例
查看>>
[容斥][dp][快速幂] Jzoj P5862 孤独
查看>>
Java基础之字符串匹配大全
查看>>
面向对象
查看>>
lintcode83- Single Number II- midium
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
Data Structure 基本概念
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
As-If-Serial 理解
查看>>
洛谷P1005 矩阵取数游戏
查看>>
无线通信基础(一):无线网络演进
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
图片点击轮播(三)-----2017-04-05
查看>>
java中new一个对象和对象=null有什么区别
查看>>