这些东西都是思想层面的东西,不是语言层面的。
实际上,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。