下面是我想要做的一個例子。基本上我的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