Skip to content

Instantly share code, notes, and snippets.

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