2017-05-31 70 views
-3

我在使用父成員函數時虛函數的行爲存在疑問。C++在父成員函數中使用虛函數的行爲

class A { 
private: 
    vars; 
    virtual fn_v() {.....} 
public: 
    fn_A() { 
    fn_v(); 
    .... 
    } 

class B : public A { 
    .... 
public: 
    fn_v() {.....} 

當我打電話fn_A()從B的對象,該對象實現虛擬函數的將被調用?

+3

這取決於。通過指針或引用基類'A'類來調用函數嗎?這個指針或引用是否真的是一個指針或對'B'類的實例的引用?然後調用'B :: fn_v'函數。 –

+7

你爲什麼不試試看? –

+0

它是類「B」的通用對象。 – PSK

回答

0

當我從調用虛擬函數的實現的B對象中調用fn_A()時,

當然在B的那個。這就是虛擬功能的意思。如果調用方法的對象是覆蓋虛方法的類,則將調用覆蓋。這是相當基本的。

+0

而且這也通過間接調用起作用?猜測是這樣的...... –

+1

@PaulStelian我不知道'通過間接調用'到底是什麼意思,但是隻要方法調用的對象是一個覆蓋虛方法的類,它就會工作。我不能說比這更平常。 – EJP