我还在学习C++; 我正在尝试多态性如何工作,并在调用虚方法时遇到分段错误.
(注意:我没有将析构函数标记为虚拟,我只是试着看看会发生什么.)这是代码:
#includeusing namespace std; class Base { protected: char *name; public: Base(char *name) { cout << name << ": Base class cons" << endl; } ~Base() { cout << name << ": Base class des" << endl; } virtual void disp(); }; void Base::disp() { cout << name << ": Base disp()" << endl; } class Child : public Base { public: Child(char *name): Base(name) { cout << name << ": Child class cons" << endl; } ~Child() { cout << name << ": Child class des" << endl; } virtual void disp() { cout << name << ": Child disp()" << endl; } }; int main() { //Base b; //b.disp(); Base c = Child("2"); c.disp(); }
另外,如果您对在Java中了解这些概念的人一般有关于继承和多态的使用的任何其他提示,请告诉我.谢谢!
name - 在Base中未初始化
你还有另一个问题:
Base c = Child("2");
我不认为这是你想要的.您的代码将从已铸造的Child创建Base实例.但我认为您希望使用基于Base接口的Child实例; 你应该写:
Base *c = new Child("2");
另外,为了避免将来出现错误,请将基础中的析构函数声明为虚拟.