c++ - 在派生类对象中使用派生类构造函数与基类类型兼容

标签 c++ inheritance constructor

class baseClass{};
class derivedClass : public baseClass{};
baseClass *obj = new derivedClass ;     // For simplicity, I amn't providing any-
                                        // class members.

尽管 baseClassderivedClass 构造发生了,但是 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/

相关文章:

c++ - 缺少未使用的纯虚拟方法的实现时链接失败

c++ - 为什么不能 map::find 指向 const 的指针?

c++ - 继承模板转换运算符

python - 如何从子类调用基类的 __init__ 方法?

javascript - Javascript中是否存在 "unsafe publication"?

c++ - std::function 可以从右值引用移动构造到临时仿函数对象吗?

c++ - 如何读取 Windows perfmon 计数器?

java - 继承: How child class interact with its parent?

c++ 如何将模板应用于模板类的子/友元?

java - 什么时候在java中使用Long vs long?