2012-03-03 136 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