私はC++を学び、仮想キーワードについて学んでいます。私はそれを無駄に理解しようとインターネットを精査した。私はエディタに入り、次の実験を行いました。基本メッセージを2回印刷することを期待していました。なぜなら、仮想キーワードが機能を無効にする必要があるからです。しかし、それは2つの異なるメッセージを印刷しました。関数を単純にオーバーライドしても一見多態的な振る舞いをすることができるのであれば、なぜ仮想キーワードが必要なのか誰かが私に説明することはできますか?おそらく誰かが私と将来の他の人々がバーチャルとオーバーライドを理解するのを助けることができます。 (私が得ている出力は "私はベースです"、 "私は派生している"です)。あなたがタイプDerived
ので、コンパイラは、関数が使用することを知っているであるとb
を宣言したのでC++仮想キーワードと関数のオーバーライド
#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;
}
注: 'using namespace std;'は習慣に慣れていないので、今すぐ止めることができます。 'std ::'接頭辞は理由のためにそこにあります:それはあなた自身のクラス、構造体および変数との衝突を避けます。 – tadman
'Base * p = new Derived;を試してください。 p> printMe(); 'と' virtual'の有無を指定します。 – HolyBlackCat
明確にするために、多態的な振る舞いは、ポインタまたはその基本クラスへの参照を通じてオブジェクトにアクセスするときに達成されます。 – DeiDei