1. 程式人生 > 其它 >智慧指標-虛解構函式-基類指標訪問子類方法

智慧指標-虛解構函式-基類指標訪問子類方法

 “電腦科學領域的任何問題都可以通過增加一個間接的中間層來解決” 

“Any problem  in computer science can be solved by anther layer of indirection.”                               ——David Wheeler(劍橋大學電腦科學教授)
 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class Fa
 6 {
 7 public:
 8     virtual void Show()
 9     {
10
cout << "father show" << endl; 11 } 12 virtual ~Fa() 13 { 14 cout << "father destructor" << endl; 15 } 16 }; 17 18 class Tclass :public Fa 19 { 20 float pa; 21 double pb; 22 string name; 23 int age; 24 public: 25 Tclass(float
pa = 1.0, double pb = 2.0, string name = "all", int age = 20) 26 { 27 this->pa = pa; 28 this->pb = pb; 29 this->name = name; 30 this->age = age; 31 } 32 void Show() override 33 { 34 std::cout << pa << " " << pb << "
" << name << " " << age << endl; 35 } 36 37 ~Tclass() 38 { 39 cout << "call Tclass destructor" << endl; 40 } 41 }; 42 class Tcb :public Fa 43 { 44 public: 45 void Show()override 46 { 47 cout << "Tcb show" << endl; 48 } 49 ~Tcb() 50 { 51 cout << "call Tcb destructor" << endl; 52 } 53 }; 54 class Shhanlde 55 { 56 Fa* ta; 57 public: 58 Shhanlde(Tclass *tcls) 59 { 60 ta = tcls; 61 } 62 Shhanlde(Tcb *tcls) 63 { 64 ta = tcls; 65 } 66 Fa* GetPt() 67 { 68 return ta; 69 } 70 71 ~Shhanlde() 72 { 73 delete ta; 74 } 75 }; 76 77 int main() 78 { 79 { 80 shared_ptr<Shhanlde> tc = make_shared<Shhanlde>(new Tclass()); 81 tc->GetPt()->Show(); 82 tc = make_shared<Shhanlde>(new Tcb()); 83 tc->GetPt()->Show(); 84 } 85 86 cout << "test" << endl; 87 return 0; 88 }