I’m still learning C++; I was trying out how polymorphism works and I got a segmentation fault when calling a virtual method.
(Note: I didn’t mark the destructor as virtual, I was just trying out to see what happens.) Here’s the code:
#include <iostream> using 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(); }
Also, if you’ve any other tips regarding the usage of inheritance and polymorphism in general for someone who knows these concepts in Java, please let me know. Thank you!
name – is unintialized in Base
also you have another problem:
I don’t think it’s what you want. Your code will create an instance of Base from casted Child. But I think you want work with Child instance based on Base interface; you should instead write:
also, to avoid future bugs, declare destructor in base as virtual.