2014-09-11 68 views
-4
class parent 
{ 
    public: 
    virtual void print() 
    { 
     printf("STUFF"); 
    } 
}; 

class child : public parent 
{ 
    public: 
    virtual void print() 
    { 
     printf("other stuff"); 
    } 
}; 

int main() 
{ 
    parent par = new child; 
    par.print(); 
    } 

當我試過這個,它總是使用父功能,而不是子功能。我試圖讓它使用子功能。函數覆蓋不工作在c + +

+1

因爲par是一個父類型變量,您的孩子將立即轉給父母。如果你想調用孩子的功能,使用基類的指針或引用,如:'parent&par = new child();' – Melkon 2014-09-11 12:20:12

+9

'parent par = new child;'這行不應該編譯 – Geoffroy 2014-09-11 12:20:14

+0

如果你的真實代碼就像'parent par = *(new child);'那麼這是因爲你正在複製對象的父對象,並丟棄(並泄漏)你從其複製的''''對象。如果它實際上是'parent * par = ...'和'parent-> print()',那麼你應該看到孩子的覆蓋。如果沒有看到實際編譯的代碼,我們無法猜測它出了什麼問題。 – 2014-09-11 12:23:39

回答

-1
class parent 
{ 
public: 
    virtual void print() 
    { 
     printf("STUFF"); 
    } 
}; 

class child : public parent 
{ 
public: 
    virtual void print() 
    { 
     printf("other stuff"); 
    } 
}; 

int main() 
{ 
    parent *par = new child; 
    par->print(); 
    delete par; 
    par = NULL; 
} 
+1

你剛剛教一個新手怎麼做不做內存管理。恭喜。 – 2014-09-11 13:40:05