【问题标题】:C++ inheritance and polymorphismC++ 继承和多态
【发布时间】:2013-07-06 05:54:17
【问题描述】:

作为一名 Java 程序员和 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);
    }
};

还有这个 sn-p 在别的地方:

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()

【问题讨论】:

    标签: c++ pointers inheritance polymorphism


    【解决方案1】:

    程序有未定义的行为,因为被调用的函数 -Parent::overrideThis 没有返回,尽管它应该返回。

    调用Parent 类中的函数是因为Parent childObject = *(child); 切片 您尝试复制的对象 - 新对象childObject 的类型为Parent,而不是@987654326 @。

    要使多态性起作用,您需要使用指针或引用:

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

    【讨论】:

    • 我如何在引用上调用 overrideThis()? (对不起,如果是一个幼稚的问题xD)
    • 我可以通过哪种方式调用 overrideThis()?也不允许我做 childObject.overrideThis()
    • dynamic_cast 呢?
    • @IgnacioVazquez-Abrams 怎么样?
    猜你喜欢
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 2015-10-26
    相关资源
    最近更新 更多