您面临的问题主要是由于“经典 OOP 术语”是独立于 C++ 语言开发的,而这又不是纯 OOP 语言。
尽管如此,在许多编程课程中,有一种历史趋势是通过 OOP 教授 C++,从而迫使 OOP 范式进入 C++,即使 C++ 范式更广泛。
在纯 OOP 术语中,“接口”的意思是“描述外部行为”(与“实现”相反),而“抽象”的意思是“在更高层次上描述某事”(与“具体”相反)
像 Java 这样的语言,其中 OOP 替换是通过专为该目的而设计的继承实现的,“接口”是“抽象的”,而类是“越来越具体”的对象层次结构。
C++ 继承是不同的:它具有 - 在它的基础上 - 与 OOP 替换和 java 继承无关,不需要方法是虚拟的,并且可以是多个。在通用范式意义上,它只是一种聚合机制,该语言可用于将事物组合在一起。
您可以用它来描述的问题比 OOP 本身解决的问题更广泛,同时也不能涵盖所有 Java 问题。但如果你强迫自己遵守一定的纪律,你仍然可以适应它们。
因此:
- 一个具有所有纯虚方法 (
virtual method(params)=0) 和一个虚 dcestructor 的类,从 OOP 的角度来看类似于一个接口
- 一个实现了所有虚拟继承方法的类就像一个实现。
但 C++ 也承认所有中间情况(仅实现 一些 方法)并且承认实现的起源不仅来自继承祖先树的相同路径。
事实上,C++ 承认完整的“多重继承方案”,而 java 承认“部分多重继承”,只有一个类和许多接口(也就是说所有实现的方法必须来自树的同一侧)
您可以强制 C++ 遵守与 java 相同的规则,方法是承认(在这一点上人为地)只有继承的基类可以提供方法,而所有其他基类只能声明它们,并首先调用“类”和“接口”其他。
但从语言的角度来看,它们之间没有概念上的区别。