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
时应该进行构造。无论如何它的用途是什么?只是好奇地知道它为什么这么设计:)
答案 0 :(得分:1)
总之,多态性。换句话说,在一个系统中,多个类是从一个公共基类派生出来的,它能够以相同的方式处理不同派生类的对象,而不必担心它们的实际类型。
考虑管理各种形状的绘图包。您可以选择使用名为Shape的抽象基类来实现常用方法,例如Draw(),并且可能有一些常见的数据成员,这些成员对于x-pos和y-pos等所有形状都是通用的。然后,您可以创建一些派生的具体类,如Ellipse和Square,它们将采用自己的特定于形状的构造函数参数,并覆盖抽象类中的Draw()方法。例如,Circle构造函数可能需要x-pos,y-pos和radius;它将使用radius参数本身,但将x-pos和y-pos参数传递给继承的构造函数。
然后,您可以实现一个Drawing()类,它充当各种Shapes的容器,并遍历该容器以呈现您的绘图,而不必担心您正在绘制的特定Shapes的实际类型。
答案 1 :(得分:0)
derivedClass
成员初始化原因的理由是,如果derivedClass
有任何虚函数覆盖baseClass
中声明的那些虚拟函数,并且这些成员引用derivedClass
的数据成员,必须进行初始化,或者在调用这些函数时,结果将是未定义的。
通常,除非您尝试使用多态类,否则不会使用继承。如果派生类不能拥有自己的状态,那么基类必须猜测派生类中所需的所有可能数据,这将是一种脆弱,脆弱的设计方法。