Permission problem on a derived private method from public method
problem:
Is there a good explanation why compilation tags error for the call to
AA.method(). It is public in the base class. If cast to baseclass,
then compiler says it's ok.














































gcc -o drvd drvd.cpp -lstdc++ -lm
drvd.cpp: In function `int main()':
drvd.cpp:26: error: `virtual void AA::method()' is private
drvd.cpp:46: error: within this context
http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/7ae23191ff4de6a9/4560e82948e9b91e#4560e82948e9b91e
Above ,it seems as if it is a paradox !
why in devived class,function method() is declared as a private memeber,still in the way
A* p = &obj;

it is right!
The phenomena is explained in the Inside the C++ object model!
In fact,p->method() is checked in two phases!
At complie time,p->method()
According to p type,check method()'s access level and method()'s validity,such as membership!
so p->method() is right!
At run time,
p->method() is called in polymorphism way according to p's RTTI information!
extending:
Although it looks strange,maybe we can employ it!
for example:
class A{
public:
virtual void method()=0;
}
class AA:public A{
private:
virtual void method(){
...
}
};
Obviously,
A is interface and AA is a implemention!
In the way,if you use AA directly,
it will result in error,so prevent any subclass's use!
A is the only entry!
It may be helpful in some library's device!
posted on 2007-04-21 12:44 丑石 閱讀(715) 評論(0) 編輯 收藏 引用 所屬分類: C++ problem and solution