C++;遗传与多态性 作为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); } }; 类父类{ 公众: 父(){} 虚拟std::字符串重写此(){} }; 类子:公共父类{ 公众: std::字符串属性; 子(const std::string&attribute):属性(attribute){} std::string重写此(){ std::cout
程序具有未定义的行为,因为正在调用的函数-C++;遗传与多态性 作为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); } }; 类父类{ 公众: 父(){} 虚拟std::字符串重写此(){} }; 类子:公共父类{ 公众: std::字符串属性; 子(const std::string&attribute):属性(attribute){} std::string重写此(){ std::cout,c++,pointers,inheritance,polymorphism,C++,Pointers,Inheritance,Polymorphism,程序具有未定义的行为,因为正在调用的函数-Parent::overrideThis不会返回,尽管它应该返回 调用Parent类中的函数是因为Parent-childObject=*(child);切片您试图复制的对象-新对象childObject的类型为Parent,而不是child 要使多态性发挥作用,您需要使用指针或引用: Parent* childObject1 = child; Parent& childObject2 = *child; childObject1->ove
Parent::overrideThis
不会返回,尽管它应该返回
调用Parent
类中的函数是因为Parent-childObject=*(child);
切片您试图复制的对象-新对象childObject
的类型为Parent
,而不是child
要使多态性发挥作用,您需要使用指针或引用:
Parent* childObject1 = child;
Parent& childObject2 = *child;
childObject1->overrideThis();
childObject2.overrideThis();
我如何在引用上调用overrideThis()(如果这是一个幼稚的问题,那么很抱歉xD)我可以用哪种方式调用overrideThis()?也不允许我做childObject。overrideThis()关于
dynamic\u cast
?@IgnacioVazquez Abrams关于它呢?
Child *child = new Child(value);
Parent childObject = *(child);
std::cout << "I'm trying this: " << childObject.overrideThis() << endl;
Parent* childObject1 = child;
Parent& childObject2 = *child;
childObject1->overrideThis();
childObject2.overrideThis();