从派生类对象访问重写的基类成员

时间:2010-10-06 11:15:31

标签: c++ inheritance override

我有两个班级:

class A
{
public:
  int i;
};

class B : public A
{
public:
  int i;
};

假设我为类B

创建了一个对象
B b;

是否可以使用A::i访问b

5 个答案:

答案 0 :(得分:7)

  

是否可以使用b?

访问A :: i

是的! b.A::i怎么样? ;)

答案 1 :(得分:4)

是:

int main()
{
    B b;

    b.i = 3;
    b.A::i = 5;

    A *pA = &b;
    B *pB = &b;
    std::cout << pA->i << std::endl;
    std::cout << pB->i << std::endl;
}

答案 2 :(得分:2)

是的,你可以。要找到阅读this

override方法提供从基类继承的成员的新实现。由覆盖声明覆盖的方法称为重写的基本方法。重写的基本方法必须与覆盖方法具有相同的签名。

在具有覆盖方法的派生类中,您仍然可以使用base关键字访问具有相同名称的重写基本方法。例如,如果您在派生类上有虚方法MyMethod()和override方法,则可以使用调用从派生类访问虚方法:

base.MyMethod()

答案 3 :(得分:2)

正如其他人所回答的那样,这是可能的。 但是在您发布的示例中,基本成员和派生成员是相同的,数据类型未被覆盖。

这与定义基本成员的新数据类型的派生类的情况相关,如本文所示:C++ Inheritance. Changing Object data Types

答案 4 :(得分:1)

两种方式:

struct A{
    A():i(1){}
    int i;
};

struct B : A{
    B():i(0), A(){}
    int i;
};

int main(){
    B b;
    cout << b.A::i;
    cout << (static_cast<A&>(b)).i;
}