C++ 为什么返回对抽象基类的引用

标签 c++ pointers reference abstract-class

在下面的类中,有一个 OpModel 类型的指针 model_,它是一个类。该指针在构造函数中使用 new 进行初始化,以创建一个 OpModel 对象。没关系,您有一个指向有效对象的指针。 model() 方法引用此指针来访问实际的 OpModel 对象。但我不明白的是它返回对 CompositionalModel 的引用,这是一个不同的类。

我认为它与多态性有关,因为OpModel派生自CompositionalModel,它是一个抽象类。但为什么要返回对基类的引用呢?

最佳答案

这是 OO 代码中非常典型的事情。

通过返回更窄的基类 - 想想接口(interface) - 调用代码只需要知道这一点。 您可以通过这种方式隐藏各种额外的血腥实现细节。 否则,任何调用代码都需要了解有关 CompositionalModel 的所有信息。

此外,这可以将 OpModel 更改为任何其他类型的 CompilationUnit,并且调用代码不需要更改。

关于C++ 为什么返回对抽象基类的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51749925/

相关文章:

c++ - 迭代任意范围的 n 维数组的最快方法?

c++ - 基于函数而不是集合的二进制搜索或迭代器?

c++ - 使用 C++14 的初始化器

c - 为什么我的数组在将其传递到另一个函数后仍保留垃圾值/段错误?

c++ - 从后台线程切换到主线程

c++ - 64 位系统上指针值的范围

c - 出现段错误 11 不确定在 C 中是否正确使用指针

c# - 如何在 C# 项目中设置 "Copy Local Dependencies"[CopyLocal 问题]

c# - VS从哪里获取旧的程序集引用元数据

c++ - 复制基类引用值以使用 shared_ptr 进行映射