-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 + +
因爲par是一個父類型變量,您的孩子將立即轉給父母。如果你想調用孩子的功能,使用基類的指針或引用,如:'parent&par = new child();' – Melkon 2014-09-11 12:20:12
'parent par = new child;'這行不應該編譯 – Geoffroy 2014-09-11 12:20:14
如果你的真實代碼就像'parent par = *(new child);'那麼這是因爲你正在複製對象的父對象,並丟棄(並泄漏)你從其複製的''''對象。如果它實際上是'parent * par = ...'和'parent-> print()',那麼你應該看到孩子的覆蓋。如果沒有看到實際編譯的代碼,我們無法猜測它出了什麼問題。 – 2014-09-11 12:23:39