c++ 接口类、纯虚类、抽象类的杂谈

本文探讨了C++和Java中接口与抽象类的区别。C++中没有明确的接口定义,但纯虚类可作为接口使用,而Java中的interface专门用于接口定义。接口继承关注函数接口,实现继承则包括接口和实现。纯虚函数用于接口继承,非纯虚函数则涉及实现。文章还提到了接口类的定义和使用方法,并提供了相关资源供深入学习。
摘要由CSDN通过智能技术生成

这些东西都是思想层面的东西,不是语言层面的。

实际上,C++中并没有明确的接口的定义,与之等价的是纯虚类,既只有纯虚函数的类,而c++中抽象类的概念是,包含至少一个纯虚函数的类。由于java只支持单继承,所以出现了interface的定义,从而用来模拟多继承。

可以这样理解,按抽象程度递增的顺序说就是:普通类->抽象类(java中由abstract修饰的类)->接口(纯虚类)(java中interface修饰的类)。

参考《Effective C++》条款31和条款34:

c++中interface class通常不带成员变量,也没有构造函数,只有一个visual析构函数以及一组pure visual函数,用来叙述整个接口。虽然类似Java和.net的interface,但是C++的interface class并不需要复旦Java和.net的interface所需负担的责任。例如:Java和.net都不允许在interface内实现成员变量或成员函数,但是C++不禁止这两样东西。

这里顺带说明接口继承和实现继承:

所谓接口继承就是派生类只继承函数的接口,也就是声明。而实现继承就是派生类同时继承函数的接口和实现。

声明一个纯虚函数(pure visual)的目的就是为了让派生类只继承函数接口,即接口继承。

声明一个非纯虚函数(impure visual)的目的是为了让派生类继承函数接口和缺省实现。

声明一个非虚函数(non visual)的目的是为了让派生类继承函数接口和一份强制实现。

推荐一篇很不错的博文:抽象类与接口的区别https://www.cnblogs.com/kingtiger/articles/2092350.html

[转]抽象类与接口的区别及应用 - zjp - 博客园抽象类与接口的区别及应用(本文由张洋提供) 抽象类(Abstract Class)与接口(Interface)是面向对象程序设计中两个重要的概念。由于两者在自身特性及应用方法上存在诸多相似性,如都不能https://www.cnblogs.com/kingtiger/articles/2092350.html

C++中抽象类和接口类的区别_为了部落!-CSDN博客_c++ 接口类和抽象类的区别(源自:http://blog.sina.com.cn/s/blog_49652a2d0100fk3n.html)Bill Venners:我在1991至1996这5年间,几乎一直仅仅使用C++编程。在那时,我认为多重继承唯一目的就是让我能够从多个基类中继承它们各自的数据和函数 — 不管是虚拟函数还是非虚拟函数。那时候,我和我使用C++的同事几乎从未想过可以使用一种不含任何数据而仅包含纯虚https://blog.csdn.net/u012575899/article/details/23702515

C++:如何正确的定义一个接口类_netyeaxi的专栏-CSDN博客_c++接口类C++中如何定义接口类?C++中如何定义标识接口类?https://blog.csdn.net/netyeaxi/article/details/80724557

C++:如何正确的使用接口类_netyeaxi的专栏-CSDN博客_c++算法接口 什么样前一篇文章中讲过C++中如何正确的定义接口类,那定义好的接口类如何正确使用?本篇将细细说说。提供接口与实现首先,声明一个接口:// circle.h// 圆的接口类class Circle {public:virtual ~Circle() {};// 接口方法:面积virtual double area() = 0;};通过继承的方式实现这个接口:/...https://blog.csdn.net/netyeaxi/article/details/80887646

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值