継承におけるコンストラクタとデストラクタの呼び出し順序

http://www.geocities.jp/ky_webid/cpp/language/008.html

スーパークラス、およびサブクラスともにコンストラクタやデストラクタが存在していた場合、どのクラスのものが呼ばれるのでしょうか?

実際に動かしてみます。

#include <iostream>

class CBase {
public:
    CBase();
    ~CBase();
};

class CSub : public CBase {
public:
    CSub();
    ~CSub();
};

CBase::CBase() {
    std::cout << "CBaseのコンストラクタ" << std::endl;
}

CBase::~CBase() {
    std::cout << "CBaseのデストラクタ" << std::endl;
}

CSub::CSub() {
    std::cout << "CSubのコンストラクタ" << std::endl;
}

CSub::~CSub() {
    std::cout << "CSubのデストラクタ" << std::endl;
}

int main () {
    CSub obj;
    return 0;
}
$ main
CBaseのコンストラクタ
CSubのコンストラクタ
CSubのデストラクタ
CBaseのデストラクタ

コンストラクタの場合、スーパークラスからサブクラスへの順に呼ばれています。

変わってデストラクタの場合は、サブクラスからスーパークラスへの順で呼ばれています。

なるほど、確かに理にかなっていますね。

しかしこれ、サブクラス側でスーパークラスのコンストラクタを呼ばせない方法とかはあるんでしょうか?

そもそもそういうことをしたいような状態になること自体、設計がミスってるってことになるんですかね。その辺もうちょっと調べる必要がありそうです。