Skip to content

Instantly share code, notes, and snippets.

@h1mesuke
Created July 25, 2010 22:03
Show Gist options
  • Save h1mesuke/489928 to your computer and use it in GitHub Desktop.
Save h1mesuke/489928 to your computer and use it in GitHub Desktop.
C++ - 多重継承時のコンストラクタ/デストラクタの呼び出し順序
#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