class baseClass{};
class derivedClass : public baseClass{};
baseClass *obj = new derivedClass ; // For simplicity, I amn't providing any-
// class members.
尽管 baseClass
和 derivedClass
构造发生了,但是 derivedClass
成员对 obj
是不透明的。那么,构造derivedClass
有什么用。顺便说一句,我知道 derivedClass
构造函数调用 baseClass
构造函数,并且在返回时应该进行 derivedClass
构造。到底有什么用呢?只是想知道为什么这样设计:)
最佳答案
一句话,多态。换句话说,在多个类派生自一个公共(public)基类的系统中,它能够以相同的方式处理不同派生类的对象,而无需担心它们的实际类型。
考虑一个管理各种形状的绘图包。您可以选择使用一个名为 Shape 的抽象基类,它实现了诸如 Draw() 之类的通用方法,并且可能具有一些对所有形状都通用的通用数据成员,例如 x-pos 和 y-pos。然后您可以创建一些派生的具体类,如 Ellipse 和 Square,它们将采用自己的特定于形状的构造函数参数并覆盖抽象类中的 Draw() 方法。例如,Circle 构造函数可能需要 x-pos、y-pos 和半径;它将使用 radius 参数本身,但将 x-pos 和 y-pos 参数传递给继承的构造函数。
然后您可以实现一个 Drawing() 类,它充当各种形状的容器,并遍历该容器以呈现您的绘图,而无需担心您正在绘制的特定形状的实际类型。
关于c++ - 在派生类对象中使用派生类构造函数与基类类型兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4623835/