1

假设我有一个 Base & Derived 类:

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哪个版本的方法?_protectedIntPtrBDerived

我问的原因 - 我想_protectedIntPtrBDerived类中进行不同的初始化,并希望_protectedIntPtrB在派生类的所有实例中使用该版本。

4

1 回答 1

5

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

是的,它隐藏了基类成员,因此在引用_protectedIntPtrB范围内的不合格使用。(如果限定为 ,则基类变量仍然可用)。DerivedDerived::_protectedIntPtrBBase::_protectedIntPtrB

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

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

我问的原因 - 我想_protectedIntPtrB在 Derived 类中进行不同的初始化,并希望在 Derived 类_protectedIntPtrB的所有实例中使用该版本。

通常,使派生类的行为与其基类不同的最佳方法是重写虚函数。如果您考虑一下您想要实现的目标可能会更好:找出您想要修改的行为,并将其封装在一个虚函数中。

于 2012-07-10T14:24:06.700 回答