下面是我想要做的一个例子。基本上我的GetInt()函数是在基类A中定义的,而我的派生类B也应该使用相同的定义。但问题是,当我从类B的对象访问GetInt()时,我想返回派生类的成员而不是基类的成员。但是,下面的代码的输出提供:访问派生类成员的基类函数
Constructor A called
Constructor A called
Constructor B called
Object A: 10
Object B: 10
,而我希望它是:
Constructor A called
Constructor A called
Constructor B called
Object A: 10
Object B: 5
class A{
public:
A(){
std::cout << "Constructor A called" << std::endl;
m_nA = 10;
}
int GetInt(){
return m_nA;
}
private:
int m_nA;
};
class B : public A{
public:
B(){
std::cout << "Constructor B called" << std::endl;
m_nA = 5;
}
private:
int m_nA;
};
int main(){
A ObjA; B ObjB;
std::cout << "Object A: " << ObjA.A::GetInt() << std::endl;
std::cout << "Object B: " << ObjB.B::GetInt() << std::endl;
return 0;
}
请建议,如果有任何的方式来做到这一点。由于
无需再声明GetInt在B类中是虚拟的,一旦在基类中虚拟化,其子类中的函数可覆盖 – 2014-10-30 08:51:16
@DebasishJana true,但我更愿意在子类中重复它,以使其可见一个虚拟的方法。特别是,'虚拟'根本就不是必需的,因为OP不会通过指针或引用来调用它。 – 2014-10-30 08:52:54
如果他打算只使用它,它甚至不需要在基类中是虚拟的。 – JorenHeit 2014-10-30 08:52:59