1 
2 
3 class C;
4 
5 class A
6 {
7 public:
A()8     A() {}
GetC()9     C* GetC() { return NULL; }
10 
DoSomething(A * a)11     void DoSomething(A* a) {}
12 };
13 
14 
15 class B : public A
16 {
17 public:
B()18   B() {}
19 
20 };
21 
22 
23 class C : public B
24 {
25 public:
C()26     C() {}
27 };
28 
29 
30 class D : public C
31 {
32 public:
D()33     D() {}
34 };
35