C ++ |重用Base类的受保护成员

时间:2012-07-10 14:14:54

标签: c++ inheritance

假设我有一个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>

1 个答案:

答案 0 :(得分:5)

  

在Derived类的方法中,是否使用了_protectedIntPtrB的派生版本?

是的,它隐藏了基类成员,因此_protectedIntPtrB范围内Derived的{​​{1}}的无限制使用是指Derived::_protectedIntPtrB。 (如果限定为Base::_protectedIntPtrB,基类变量仍然可用。)

  

如果Derived类没有重新定义方法,指向Derived类的指针将使用哪个版本的_protectedIntPtrB

基类变量。派生类的数据成员不能从基类中获得。

  

我要问的原因 - 我想以不同方式初始化Derived类中的_protectedIntPtrB,并希望在Derived类的所有实例中使用_protectedIntPtrB的{​​{1}}版本。

通常,使派生类的行为与其基类行为不同的最佳方法是覆盖虚函数。如果您想要确切地想要实现什么,那可能会更好:找出您想要修改的行为,并将其封装在虚拟函数中。