1*99451b44SJordan Rupprecht #include <stdio.h>
2*99451b44SJordan Rupprecht #include <stdint.h>
3*99451b44SJordan Rupprecht
4*99451b44SJordan Rupprecht class A
5*99451b44SJordan Rupprecht {
6*99451b44SJordan Rupprecht public:
A(int a)7*99451b44SJordan Rupprecht A(int a) :
8*99451b44SJordan Rupprecht m_a(a)
9*99451b44SJordan Rupprecht {
10*99451b44SJordan Rupprecht }
~A()11*99451b44SJordan Rupprecht virtual ~A(){}
get2() const12*99451b44SJordan Rupprecht virtual int get2() const { return m_a; }
get() const13*99451b44SJordan Rupprecht virtual int get() const { return m_a; }
14*99451b44SJordan Rupprecht protected:
15*99451b44SJordan Rupprecht int m_a;
16*99451b44SJordan Rupprecht };
17*99451b44SJordan Rupprecht
18*99451b44SJordan Rupprecht class B : public A
19*99451b44SJordan Rupprecht {
20*99451b44SJordan Rupprecht public:
B(int a,int b)21*99451b44SJordan Rupprecht B(int a, int b) :
22*99451b44SJordan Rupprecht A(a),
23*99451b44SJordan Rupprecht m_b(b)
24*99451b44SJordan Rupprecht {
25*99451b44SJordan Rupprecht }
26*99451b44SJordan Rupprecht
~B()27*99451b44SJordan Rupprecht ~B() override
28*99451b44SJordan Rupprecht {
29*99451b44SJordan Rupprecht }
30*99451b44SJordan Rupprecht
get2() const31*99451b44SJordan Rupprecht int get2() const override
32*99451b44SJordan Rupprecht {
33*99451b44SJordan Rupprecht return m_b;
34*99451b44SJordan Rupprecht }
get() const35*99451b44SJordan Rupprecht int get() const override
36*99451b44SJordan Rupprecht {
37*99451b44SJordan Rupprecht return m_b;
38*99451b44SJordan Rupprecht }
39*99451b44SJordan Rupprecht
40*99451b44SJordan Rupprecht protected:
41*99451b44SJordan Rupprecht int m_b;
42*99451b44SJordan Rupprecht };
43*99451b44SJordan Rupprecht
44*99451b44SJordan Rupprecht struct C
45*99451b44SJordan Rupprecht {
CC46*99451b44SJordan Rupprecht C(int c) : m_c(c){}
~CC47*99451b44SJordan Rupprecht virtual ~C(){}
48*99451b44SJordan Rupprecht int m_c;
49*99451b44SJordan Rupprecht };
50*99451b44SJordan Rupprecht
51*99451b44SJordan Rupprecht class D : public C, public B
52*99451b44SJordan Rupprecht {
53*99451b44SJordan Rupprecht public:
D(int a,int b,int c,int d)54*99451b44SJordan Rupprecht D(int a, int b, int c, int d) :
55*99451b44SJordan Rupprecht C(c),
56*99451b44SJordan Rupprecht B(a, b),
57*99451b44SJordan Rupprecht m_d(d)
58*99451b44SJordan Rupprecht {
59*99451b44SJordan Rupprecht }
60*99451b44SJordan Rupprecht protected:
61*99451b44SJordan Rupprecht int m_d;
62*99451b44SJordan Rupprecht };
main(int argc,char const * argv[],char const * envp[])63*99451b44SJordan Rupprecht int main (int argc, char const *argv[], char const *envp[])
64*99451b44SJordan Rupprecht {
65*99451b44SJordan Rupprecht D *good_d = new D(1, 2, 3, 4);
66*99451b44SJordan Rupprecht D *d = nullptr;
67*99451b44SJordan Rupprecht return d->get();
68*99451b44SJordan Rupprecht }
69*99451b44SJordan Rupprecht
70