2012-03-03 180 views
-3

我有2個類:一個基本和一個派生。也有結構。虛擬功能故障

struct D; 

class A { 
    public: 
    virtual D Multiply(D one, D two) { 
     //realization 
     return result; 
    } 
    virtual D Pow(D one, D two) { 
     result = this->Multiply(one,two); //#1 
     return result; 
    } 
}; 

class B: public virtual A { 
    public: 
    virtual D Multiply (D one, D two){ 
      //realization 
    } 
}; 

功能Multiply實現在class A。那麼,這個代碼很好?

B* b = new B(); 
    b->Pow(one,two); // #2 

和功能A::MultiplyB::Multiply會叫在#2?我認爲,this#1將指向B對象的A部分。

+1

當你嘗試過什麼事? – 2012-03-03 18:11:58

+0

可能沒有任何事情發生,因爲Multiply是私人的。 – ipc 2012-03-03 18:13:01

+0

對不起,所有功能都是公開的,我錯過了這個 – gaussblurinc 2012-03-03 18:15:50

回答

3

它會調用B :: Multiply,這是基本的OO校長。

+0

好的,我知道面向對象,但你可以試試這個代碼,而不是如此迂腐。 – gaussblurinc 2012-03-03 18:20:41

1

這並沒有提供B ::乘法實現,所以你會得到編譯錯誤(未解決外部) 如果你寫你實施B級編譯器會調用B ::乘

+0

我已經測試了這個應用程序,這是我得到的錯誤\t錯誤LNK2001:無法解析的外部符號 「虛擬INT __thiscall B ::乘(INT,INT)」(?乘@乙@@ EAEHHH @ Z) – 2012-03-03 18:31:22

+0

問題解決 – gaussblurinc 2012-03-03 18:35:11

+0

對不起,我沒有注意到這個問題已被編輯。當問題沒有提供'B :: Multiply'的定義時,你的回答是正確的。爲了能夠恢復我的downvote,我對你的答案做了一個小小的修改。 – hvd 2012-03-03 18:36:28