作者herbert570 (エニシ 縁)
看板EE_DSnP
標題[問題] protected 問題
時間Mon Nov 30 21:58:12 2009
下面是一段 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)
1F:推 keyboardle:17行.f->haha()改成haha().應該就可以了 11/30 23:25
2F:→ keyboardle:我想老師的protected可被derived class直接access是 11/30 23:26
3F:→ keyboardle:指這個意思 11/30 23:26
4F:推 ric2k1:protected 的意思是: derived class 的物件可以 access 12/01 00:32
5F:→ ric2k1:到它 parent class 的 protected component. 注意這個 12/01 00:33
6F:→ ric2k1:derived class object 是包含/繼承 parent class 的 data 12/01 00:34
7F:→ ric2k1:所以 access 它就像是 access 爸爸媽媽家傳給你的東西, 12/01 00:35
8F:→ ric2k1:但是 derive class object 裏的 T* data member, 只是一個 12/01 00:35
9F:→ ric2k1:指標指到隔壁的王伯柏, 他的 protected component 當然不會 12/01 00:36
10F:→ ric2k1:隨便讓你去 access... 12/01 00:37
11F:→ herbert570:喔喔~~~原來如此!謝謝教授! 我還以為這是指兩個class 12/01 02:06
12F:→ herbert570:間的關係,原來只有自己這個 object 內部的關係 12/01 02:07