2010-01-15 117 views
0
class A 
{ 
public: 
    virtual void 
     doSomething(void) 
    {} 

    void 
     doStuff(void) 
    { 
     doSomething(); 
    } 
}; 

class B : public A 
{ 
public: 
    void 
     doSomething(void) 
    { 
     // do some stuff here 
    } 
}; 

B * b = new B; 
b->doStuff(); 

它給我分段錯誤。我究竟做錯了什麼?它應該在我看來很好!從基類方法調用子類虛擬方法

回答

1

就我所見,你在類定義下面的代碼中沒有做任何多態。

b->doStuff()應該調用B類的方法。如果你想在裏面撥打A-> doSomething你可以用A:: doSomething

+0

B沒有doStuff成員 - 所以A :: doStuff將被調用。 – 2010-01-15 12:42:36

+0

他正在調用非多態'doStuff',其實現調用多態'doSomething'。 – ChrisW 2010-01-15 12:43:31

+0

我打電話給在'B'類中聲明並從'A'類調用的'doStuff()'。 – kjagiello 2010-01-15 12:45:23

0

你不應該有:class Apublic A ...

+0

我的不好。但是這不是問題。 – kjagiello 2010-01-15 12:40:56

5

後,我糾正語法錯誤,並添加一個main()函數,它編譯沒有問題我執行。嘗試發佈導致問題的REAL代碼,並重新考慮代碼格式。