C++ 接口继承和实现继承之间的区别

C++ 接口继承和实现继承之间的区别,c++,inheritance,C++,Inheritance,我在Meyers的书中找到了这两个术语,但是有什么区别呢?接口继承是公共继承,而实现继承是私有继承 如果类B公开继承自A,则B是A:它继承A的整个接口,并且A(对B对象的引用/指针)可以自动升级为A,并在需要A对象的任何地方使用。但是,如果B私下从A继承,则B根据A实现:只继承A的实现,而不继承其接口。因此(指向)B对象的引用/指针不能用于预期A对象的位置 更新 为了反映@Michal的评论,这里有一些链接(主要基于)来演示这些术语在C++环境中的常见用法: 实现(或类)继承是指在基类中

我在Meyers的书中找到了这两个术语,但是有什么区别呢?

接口继承是公共继承,而实现继承是私有继承

如果类B公开继承自A,则B是A:它继承A的整个接口,并且A(对B对象的引用/指针)可以自动升级为A,并在需要A对象的任何地方使用。但是,如果B私下从A继承,则B根据A实现:只继承A的实现,而不继承其接口。因此(指向)B对象的引用/指针不能用于预期A对象的位置

更新 为了反映@Michal的评论,这里有一些链接(主要基于)来演示这些术语在C++环境中的常见用法:

实现(或类)继承是指在基类中分离实现的公共部分


接口继承是指当您使用虚拟方法时。它旨在将接口与实现分离,并最小化程序元素之间的依赖关系。

主要区别在于接口是公共继承,而实现是私有继承。 在公共继承中,公共和受保护部分的数据成员和方法将在各自的访问说明符中从基类继承到派生类。同时,派生类的对象可以像普通方法一样访问基类的数据成员。
public和protected部分的数据成员和方法将在private access说明符中从基类继承到派生类

注意,
private
继承只能在非常有限的情况下使用(主要是:虚拟覆盖/空基优化)。“implemented in terms of”关系最好通过组合来实现。您的语句在几个方面是不正确的:1)您不需要在派生类中添加任何新字段/方法来继承其实现,2)您不需要虚拟方法来继承类的接口,它在公共继承的情况下默认发生。更准确地说,更正为1)。我的定义是由注释再次支持的,即C++,而不是C ^::C++,因为语言甚至不包含接口的概念——在实践中,它被实现为只包含纯虚拟方法的类。