2013-07-06 159 views
0

作爲一名Java程序員和一名C++ noob,我在C++中處理繼承困難。現在,我有這樣的:C++繼承和多態性

class Parent { 
public: 
    Parent() {} 
    virtual std::string overrideThis() { } 
}; 

class Child : public Parent { 
public: 
    std::string attribute; 
    Child(const std::string& attribute) : attribute(attribute) { } 
    std::string overrideThis(){ 
    std::cout << "I'm in the child" << std::endl; 
    return attribute.substr(1, attribute.size()-2); 
    } 
}; 

而且這個片段在別處:

Child *child = new Child(value); 
Child childObject = *(child); 
std::cout << "I'm trying this: " << childObject.overrideThis() << endl; 

上面的代碼按預期工作被印在屏幕上的消息。但如果不是我試試這個:

Child *child = new Child(value); 
Parent childObject = *(child); 
std::cout << "I'm trying this: " << childObject.overrideThis() << endl; 

我有一個有趣的運行時錯誤,在我的屏幕上有很多有趣的人物。指針使用多態的正確方法是什麼?我想要做的是調用overrideThis()Child實例

回答

2

該程序具有未定義的行爲,因爲被調用的函數 - Parent::overrideThis不返回,儘管它應該。

Parent類的函數被調用,因爲Parent childObject = *(child);在嘗試複製對象 - 新對象,childObject的類型Parent,不Child的。

對於多態性的工作,你需要爲使用指針或引用:

Parent* childObject1 = child; 
Parent& childObject2 = *child; 
childObject1->overrideThis(); 
childObject2.overrideThis(); 
+0

我怎樣才能在參考調用overrideThis()? (對不起,如果是一個天真的問題xD) –

+0

@CarlosGavidia編輯。 –

+0

以哪種方式我可以調用overrideThis()?既不允許我做childObject.overrideThis() –