C++继承类具有同名成员

cla*_*amp 15 c++ class base

在C++中,您可以将成员放在基类中,并在继承的类中使用相同名称的成员.

如何访问继承类中的特定类?

Kir*_*sky 29

在这种情况下,您应该完全限定成员名称.

class A
{
public:
  int x;
};


class B : public A
{
public:
  int x;
  B() 
  { 
    x = 0;
    A::x = 1;
  }
};
Run Code Online (Sandbox Code Playgroud)


Mic*_*zek 8

如果指定名称,则将自动访问继承类中的名称.如果您的意思是如何访问基类中的那个,请使用Base :: member


def*_*ode 6

要访问基类中的隐藏成员,必须在成员名称前加上基类名称.见下文:

class A
{
protected:
   int i;
};

class B : public A
{
public:
   void foo( void )
   {
      int a_i = A::i;
      int b_i = i;
      int b_i_as_well = B::i;
   }
private:
   int i;
};
Run Code Online (Sandbox Code Playgroud)


AnT*_*AnT 6

一种方法(已在所有其他答案中提到)是使用限定成员名称,例如Base::member. 它可以与通过明确的访问一起使用this指针,如果这是你的风格:this->Base::member

另一种方法是通过this显式转换为基类类型的指针执行访问:((Base *) this)->member

当然,上面对this指针的引用是在假设您试图从类的某些非静态成员函数中访问成员的情况下进行的。要从“外部”访问 if,可以将相同的技巧应用于任何其他指针(或引用):some_pointer->Base::memberor ((Base *) some_pointer)->member

对于数据成员,这两种方法是等效的。对于成员函数,它们可以导致与虚函数不同的结果。出于这个原因,一般来说,第一种方法应该是首选。


Dan*_*nas 5

是的。

f()使用类名来限定您的调用:SpecificClass::f()