我有两个班级:
class A
{
public:
int i;
};
class B : public A
{
public:
int i;
};
假设我为类B
B b;
是否可以使用A::i
访问b
?
答案 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;
}