This shows you the differences between two versions of the page.
| cpp:virtual_inheritance [2018/07/03 13:39] – created allspark | cpp:virtual_inheritance [2018/07/03 13:40] (current) – allspark | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| # virtual inheritance | # virtual inheritance | ||
| + | ```cpp | ||
| + | #include < | ||
| + | #include < | ||
| + | using namespace std; | ||
| + | struct Base | ||
| + | { | ||
| + | Base() | ||
| + | { | ||
| + | cout << __PRETTY_FUNCTION__ << endl; | ||
| + | } | ||
| + | Base(int a) | ||
| + | { | ||
| + | cout << __PRETTY_FUNCTION__ << endl; | ||
| + | cout << "a: " << a << endl; | ||
| + | } | ||
| + | }; | ||
| + | |||
| + | struct Left : virtual Base | ||
| + | { | ||
| + | Left() : Base() | ||
| + | { | ||
| + | cout << __PRETTY_FUNCTION__ << endl; | ||
| + | } | ||
| + | Left(int a) : Base(a) | ||
| + | { | ||
| + | cout << __PRETTY_FUNCTION__ << endl; | ||
| + | cout << "a: " << a << endl; | ||
| + | } | ||
| + | }; | ||
| + | |||
| + | struct Right : virtual Base | ||
| + | { | ||
| + | Right() : Base() | ||
| + | { | ||
| + | cout << __PRETTY_FUNCTION__ << endl; | ||
| + | } | ||
| + | Right(int a) : Base(a) | ||
| + | { | ||
| + | cout << __PRETTY_FUNCTION__ << endl; | ||
| + | cout << "a: " << a << endl; | ||
| + | } | ||
| + | }; | ||
| + | |||
| + | struct Down : Left, Right | ||
| + | { | ||
| + | Down() : Base(), Right(), Left() | ||
| + | { | ||
| + | cout << __PRETTY_FUNCTION__ << endl; | ||
| + | } | ||
| + | Down(int a) : Base(a+1), Right(a+2), Left(a+3) | ||
| + | { | ||
| + | cout << __PRETTY_FUNCTION__ << endl; | ||
| + | cout << "a: " << a << endl; | ||
| + | } | ||
| + | }; | ||
| + | |||
| + | int main() | ||
| + | { | ||
| + | std::cout << " | ||
| + | |||
| + | auto ptr = std:: | ||
| + | auto ptr2 = std:: | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | ``` | ||
| + | |||
| + | ```output | ||
| + | Hello, World! | ||
| + | Base:: | ||
| + | Left:: | ||
| + | Right:: | ||
| + | Down:: | ||
| + | Base:: | ||
| + | a: 2 | ||
| + | Left:: | ||
| + | a: 4 | ||
| + | Right:: | ||
| + | a: 3 | ||
| + | Down:: | ||
| + | a: 1 | ||
| + | ``` | ||