If we see the below code, fun function converts C's object into B's object and calls B' own function. How doesn't it give segm fault. I think this will lead to crash. My program is not crashed. Can any one explains why is it working fine.
#include<iostream> using namespace std; class A{ public: A() {cout<<"A's Con\n"; } ~A() {cout<<"A's De\n"; } }; class B :public A { public: B() {cout<<"B's Con\n"; } ~B() {cout<<"B's De\n"; } void printb(){cout<<"B print function\n";} void printb2(){cout<<"B print2 function\n";} }; class C :public A { public: C() {cout<<"C's Con\n"; } ~C() {cout<<"C's De\n"; } void printc(){cout<<"C print function\n";} }; void fun(A *ap) { B *bp = (B*) ap; bp->printb2(); } int main() { C c; fun(&c); return 0; }