我正在學習C++並且正在學習有關virtual關鍵字的知識。我搜索了互聯網試圖瞭解它無濟於事。我進入了我的編輯器,做了下面的實驗,期待它打印兩次基本消息(因爲我的印象是需要virtual關鍵字來覆蓋函數)。但是,它打印出兩個不同的信息。有人可以向我解釋爲什麼我們需要虛擬關鍵字,如果我們可以簡單地覆蓋功能,並仍然看起來像多態行爲?也許有人可以幫助我和其他人在未來理解虛擬與壓倒一切。 (我得到的輸出是「我是基礎」,後面是「我是派生的」)。C++虛擬關鍵字vs覆蓋函數
#include <iostream>
using namespace std;
class Base{
public:
void printMe(){
cout << "I am the base" << endl;
}
};
class Derived: public Base{
public:
void printMe(){
cout << "I am the derived" << endl;
}
};
int main() {
Base a;
Derived b;
a.printMe();
b.printMe();
return 0;
}
注意:'使用命名空間標準;'是一個不好的習慣,如果你現在可以停下來,你可能會避免將來的很多麻煩。 'std ::'前綴是有原因的:它避免了與你自己的類,結構和變量的衝突。 – tadman
試試'Base * p = new Derived; p-> printMe();'有和沒有'虛擬'。 – HolyBlackCat
澄清 - 當通過指針或對其基類的引用訪問對象時,實現多態行爲。 – DeiDei