作者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