作为一名 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);
}
};
这个片段在其他地方:
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();
关于C++继承与多态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17500131/