假设我有一个Base&派生类:
class Base{
private:
int* _privateIntPtrB;
protected:
int* _protectedIntPtrB;
public:
//methods which use
//_privateIntPtrB and _protectedIntPtrB
class Derived: public Base{
private:
int* _privateIntPtrD;
protected:
int* _protectedIntPtrB; //I am redeclaring this var
public:
//methods which use
//_privateIntPtrD and _protectedIntPtrB
我的问题:
在Derived
类的方法中,是否使用了_protectedIntPtrB
的派生版本? (我认为确实如此,但想确认)。
如果Derived
类未重新定义方法,_protectedIntPtrB
类的指针将使用哪个版本的Derived
?
我问的原因 - 我想以不同的方式初始化_protectedIntPtrB
类中的Derived
,并希望在Derived类的所有实例中使用_protectedIntPtrB
的{{1}}版本。 / p>
答案 0 :(得分:5)
在Derived类的方法中,是否使用了
_protectedIntPtrB
的派生版本?
是的,它隐藏了基类成员,因此_protectedIntPtrB
范围内Derived
的{{1}}的无限制使用是指Derived::_protectedIntPtrB
。 (如果限定为Base::_protectedIntPtrB
,基类变量仍然可用。)
如果Derived类没有重新定义方法,指向Derived类的指针将使用哪个版本的
_protectedIntPtrB
?
基类变量。派生类的数据成员不能从基类中获得。
我要问的原因 - 我想以不同方式初始化Derived类中的
_protectedIntPtrB
,并希望在Derived类的所有实例中使用_protectedIntPtrB
的{{1}}版本。
通常,使派生类的行为与其基类行为不同的最佳方法是覆盖虚函数。如果您想要确切地想要实现什么,那可能会更好:找出您想要修改的行为,并将其封装在虚拟函数中。