Created
July 25, 2010 22:03
-
-
Save h1mesuke/489928 to your computer and use it in GitHub Desktop.
C++ - 多重継承時のコンストラクタ/デストラクタの呼び出し順序
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
using namespace std; | |
class BaseA | |
{ | |
public: | |
BaseA() { cout << "constructor of BaseA\n"; } | |
~BaseA() { cout << "destructor of BaseA\n"; } | |
}; | |
class BaseB | |
{ | |
public: | |
BaseB() { cout << "constructor of BaseB\n"; } | |
~BaseB() { cout << "destructor of BaseB\n"; } | |
}; | |
class BaseC | |
{ | |
public: | |
BaseC() { cout << "constructor of BaseC\n"; } | |
~BaseC() { cout << "destructor of BaseC\n"; } | |
}; | |
class BaseD | |
{ | |
public: | |
BaseD() { cout << "constructor of BaseD\n"; } | |
~BaseD() { cout << "destructor of BaseD\n"; } | |
}; | |
class DerivedA1 : public BaseA | |
{ | |
public: | |
DerivedA1() { cout << "constructor of DerivedA1\n"; } | |
~DerivedA1() { cout << "destructor of DerivedA1\n"; } | |
}; | |
class DerivedA2 : public DerivedA1 | |
{ | |
public: | |
DerivedA2() { cout << "constructor of DerivedA2\n"; } | |
~DerivedA2() { cout << "destructor of DerivedA2\n"; } | |
}; | |
class DerivedAB : public BaseA, public BaseB | |
{ | |
public: | |
DerivedAB() { cout << "constructor of DerivedAB\n"; } | |
~DerivedAB() { cout << "destructor of DerivedAB\n"; } | |
}; | |
class DerivedCD : public BaseC, public BaseD | |
{ | |
public: | |
DerivedCD() { cout << "constructor of DerivedCD\n"; } | |
~DerivedCD() { cout << "destructor of DerivedCD\n"; } | |
}; | |
class DerivedABCD : public DerivedAB, public DerivedCD | |
{ | |
public: | |
DerivedABCD() { cout << "constructor of DerivedABCD\n"; } | |
~DerivedABCD() { cout << "destructor of DerivedABCD\n"; } | |
}; | |
int main(int argc, char const* argv[]) | |
{ | |
{ | |
cout << "\n* DerivedA2\n"; | |
DerivedA2 o; | |
} | |
{ | |
cout << "\n* DerivedAB\n"; | |
DerivedAB o; | |
} | |
{ | |
cout << "\n* DerivedABCD\n"; | |
DerivedABCD o; | |
} | |
return 0; | |
} | |
// vim: filetype=cpp |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment