J*****n 发帖数: 4859 | 1 class A
{
protected:
int foo;
};
class B: public A
{
public:
bool compare(A *p)
{
if foo==p->foo then
return true;
else
return false;
}
};
代码如上,编译说p--〉foo不能被调用。
书上说改为B *p就可以了,另外似乎改为A &p也行。
谁能解释一下其中的机理呢?
谢谢。 | z**k 发帖数: 629 | 2 编译说p--〉foo不能被调用的原因是B类对象的成员函数无法存取A类对象的protected
类成员变量.
书上说改为B *p就可以了, 原因是B类对象的成员函数当然可以存取B类对象的成员变量
,尽管那个成员变量是其继承的(必须是public继承且修饰为public或protected).
另外似乎改为A &p也行, 这个似乎不行,不过没有试过.
最后, 这个 compare函数设计不合理,楼主可以讲讲它的设计用途. |
|