【发布时间】:2011-04-07 09:42:35
【问题描述】:
我想了解为什么当我通过指向基类的指针从派生类调用在基类中声明和实现的受保护方法时,我得到编译错误(C2248),当我通过指向派生类的指针从派生类调用它时实例,编译过程。
我知道这是语言的一部分,但我想了解原因
我的解释是,当我通过派生类中的基类指针调用基类的受保护成员时,编译失败,因为基类的继承可以是受保护的或私有的,但是当我通过指向派生类的指针调用它时派生类没关系,因为它是类的一部分。 对吗?
例如
class Base
{
protected:
virtual void func() {}
}
class Derived : public Base
{
public:
virtual void myMethod()
{
Base* pBase = new Base;
pBase->func(); -> compilation error (C2248)
Derived* pDerived = new Derived;
pDerived->func(); -> O.K
}
}
【问题讨论】: