簡體   English   中英

C ++繼承和多態

[英]C++ inheritance and polymorphism

作為Java程序員和C ++ noob,我在處理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;

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

該程序具有未定義的行為,因為正在調用的函數 - Parent::overrideThis不會返回,盡管它應該返回。

調用Parent類中的函數,因為Parent childObject = *(child); 切片您嘗試復制的對象 - 新對象, childObject的類型為Parent ,而不是Child

要使多態性起作用,您需要使用指針或引用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM