看板 EE_DSnP 關於我們 聯絡資訊
下面是一段 test code 問題出在 derived class 的 destructor。 這個 destructor 呼叫了 base class 的一個 pretected 的函式。 不過不是呼叫自己的,是呼叫別人的。詳情在下面的 test code 中。 為什麼 derived class 不能呼叫 base class 的 protected 函式? -- #include <iostream> #include <cstdlib> using namespace std; class T { public: T(){}; protected: bool haha(){ return true; } private: int _data; }; class S: public T{ public: S(): f(new T()) {}; ~S(){ if(f->haha()) cout << "haha() called;\n"; delete f; } protected: T* f; }; int main (){ return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.4.235 ※ 編輯: herbert570 來自: 140.112.4.235 (11/30 22:08)
keyboardle:17行.f->haha()改成haha().應該就可以了 11/30 23:25
keyboardle:我想老師的protected可被derived class直接access是 11/30 23:26
keyboardle:指這個意思 11/30 23:26
ric2k1:protected 的意思是: derived class 的物件可以 access 12/01 00:32
ric2k1:到它 parent class 的 protected component. 注意這個 12/01 00:33
ric2k1:derived class object 是包含/繼承 parent class 的 data 12/01 00:34
ric2k1:所以 access 它就像是 access 爸爸媽媽家傳給你的東西, 12/01 00:35
ric2k1:但是 derive class object 裏的 T* data member, 只是一個 12/01 00:35
ric2k1:指標指到隔壁的王伯柏, 他的 protected component 當然不會 12/01 00:36
ric2k1:隨便讓你去 access... 12/01 00:37
herbert570:喔喔~~~原來如此!謝謝教授! 我還以為這是指兩個class 12/01 02:06
herbert570:間的關係,原來只有自己這個 object 內部的關係 12/01 02:07