Created
July 26, 2010 03:01
-
-
Save h1mesuke/490129 to your computer and use it in GitHub Desktop.
C++ - 多重継承時のコンストラクタ/デストラクタの呼び出し順序2
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 BaseV | |
{ | |
public: | |
BaseV() { cout << "constructor of BaseV\n"; } | |
~BaseV() { cout << "destructor of BaseV\n"; } | |
}; | |
class BaseW | |
{ | |
public: | |
BaseW() { cout << "constructor of BaseW\n"; } | |
~BaseW() { cout << "destructor of BaseW\n"; } | |
}; | |
class BaseX | |
{ | |
public: | |
BaseX() { cout << "constructor of BaseX\n"; } | |
~BaseX() { cout << "destructor of BaseX\n"; } | |
}; | |
class BaseY | |
{ | |
public: | |
BaseY() { cout << "constructor of BaseY\n"; } | |
~BaseY() { cout << "destructor of BaseY\n"; } | |
}; | |
class DerivedA : virtual public BaseV | |
{ | |
public: | |
DerivedA() { cout << "constructor of DerivedA\n"; } | |
~DerivedA() { cout << "destructor of DerivedA\n"; } | |
}; | |
class DerivedB : virtual public BaseV | |
{ | |
public: | |
DerivedB() { cout << "constructor of DerivedB\n"; } | |
~DerivedB() { cout << "destructor of DerivedB\n"; } | |
}; | |
class DerivedC : virtual public BaseW | |
{ | |
public: | |
DerivedC() { cout << "constructor of DerivedC\n"; } | |
~DerivedC() { cout << "destructor of DerivedC\n"; } | |
}; | |
class DerivedAB : public DerivedA, public DerivedB | |
{ | |
public: | |
DerivedAB() { cout << "constructor of DerivedAB\n"; } | |
~DerivedAB() { cout << "destructor of DerivedAB\n"; } | |
}; | |
class DerivedXABY : public BaseX, public DerivedAB, public BaseY | |
{ | |
public: | |
DerivedXABY() { cout << "constructor of DerivedXABY\n"; } | |
~DerivedXABY() { cout << "destructor of DerivedXABY\n"; } | |
}; | |
class DerivedXABYC : public BaseX, public DerivedAB, public BaseY, public DerivedC | |
{ | |
public: | |
DerivedXABYC() { cout << "constructor of DerivedXABYC\n"; } | |
~DerivedXABYC() { cout << "destructor of DerivedXABYC\n"; } | |
}; | |
int main(int argc, char const* argv[]) | |
{ | |
{ | |
cout << "\n* DerivedAB\n"; | |
DerivedAB o; | |
} | |
{ | |
cout << "\n* DerivedXABY\n"; | |
DerivedXABY o; | |
} | |
{ | |
cout << "\n* DerivedXABYC\n"; | |
DerivedXABYC o; | |
} | |
return 0; | |
} | |
// vim: filetype=cpp |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment