在C ++中,您可以将成员放在基类中,并在继承的类中使用相同名称的成员。
如何访问继承类中的特定类?
答案 0 :(得分:28)
在这种情况下,您应该完全限定成员名称。
class A
{
public:
int x;
};
class B : public A
{
public:
int x;
B()
{
x = 0;
A::x = 1;
}
};
答案 1 :(得分:7)
如果指定名称,您将自动访问继承类中的名称。如果您的意思是如何访问基类中的那个,请使用Base :: member
答案 2 :(得分: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;
};
答案 3 :(得分:4)
是
使用班级名称f()
确认您的电话SpecificClass::f()
。
答案 4 :(得分:3)
在前缀classname::
前加上。
答案 5 :(得分:3)
一种方法(在所有其他答案中已经提到)是使用合格的成员名称,例如Base::member
。它可以通过this
指针与显式访问结合使用,如果这是你的风格:this->Base::member
。
另一种方法是通过显式转换为基类类型的this
指针执行访问:((Base *) this)->member
。
当然,上面对this
指针的引用是在假设您尝试从类的某个非静态成员函数中访问该成员的情况下进行的。要从“外部”访问,可以将相同的技巧应用于任何其他指针(或引用):some_pointer->Base::member
或((Base *) some_pointer)->member
。
对于数据成员,这两种方法是等效的。对于成员函数,它们可以通过虚函数导致不同的结果。因此,一般来说,第一种方法应该是首选。
答案 6 :(得分:1)
#include <iostream>
using namespace std;
struct Base {
int memfcn();
};
struct Derived : Base {
int memfcn(int);
};
int main() {
Derived d;
Base b;
d.Base::memfcn(); //you can even use :: in conjunction with dot(.). This is new to me.
}