2017-06-09 8 views
1

私は以下のようなコードを実行していましたが、子クラスのメソッドが非仮想であることがわかりましたが、メソッドはその基本クラスポインタ。誰でも私に理由を教えてもらえますか?基本クラスの仮想メソッドと子クラスの非virtulaメソッド。子クラスのメソッドが非仮想であっても呼び出される方法はまだありません

class Base { 
    virtual void method() { std::cout << "from Base" << std::endl; } 
public: 
    virtual ~Base() { method(); } 
    void baseMethod() { method(); } 
}; 

class A : public Base { 
    void method() { std::cout << "from A" << std::endl; } 
public: 
    ~A() { method(); } 
}; 


int main(void) { 
    Base* base = new A; 
    base->baseMethod();  
    getchar(); 
    return 0;  
} 

出力 -

+0

'virtual'キーワードは、派生クラスではオプションです。 –

+0

virtual once - virtual forever ... "devirtualize"メソッドはありません。 –

+0

子クラスの仮想キーワードの意味は省略できますか? –

答えて

1

から仮想メソッドをオーバーライドする派生クラスのメソッドがあまりにvirtualあろう。それにはキーワードvirtualが使用されているかどうかはまったく関係ありません。

そして派生クラスでこの機能は、(ワードオーバーライドは、その宣言に使用されているか否か)、仮想(virtualキーワードは、その宣言に使用されているか否か)と塩基をオーバーライド:: VFです。

+0

引用がどこから来たのかへの参照を含めるとよいでしょう。 –

+0

@MartinBonner私は "virtual"という言葉にリンクを張っています。 ? – songyuanyao

関連する問題