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)
要访问基类中的隐藏成员,必须在成员名称前加上基类名称.见下文:
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)
一种方法(已在所有其他答案中提到)是使用限定成员名称,例如Base::member. 它可以与通过明确的访问一起使用this指针,如果这是你的风格:this->Base::member。
另一种方法是通过this显式转换为基类类型的指针执行访问:((Base *) this)->member。
当然,上面对this指针的引用是在假设您试图从类的某些非静态成员函数中访问成员的情况下进行的。要从“外部”访问 if,可以将相同的技巧应用于任何其他指针(或引用):some_pointer->Base::memberor ((Base *) some_pointer)->member。
对于数据成员,这两种方法是等效的。对于成员函数,它们可以导致与虚函数不同的结果。出于这个原因,一般来说,第一种方法应该是首选。