I have following classes.
class A { public: void fun(); } class B: public A { } class C: public A { } A * ptr = new C;
Is it ok to do something like below? Will i have some problems if introduce some virtual functions in the baseclass?
((B *)ptr)->fun();
This may look stupid, but i have a function that calls A’s function through B and i don’t want to change that.
You can’t cast an A* pointing to Class C as a B* because Class C doesn’t have any relation with Class B. You’ll get undefined behavior which will probably be the wrong function called and stack corruption.
If you intended for class C to derive from class B then you could. However, you wouldn’t need to. If class C doesn’t have fun() defined, it will inherit A’s. You didn’t declare fun() virtual though so you’ll get strange behavior if you even implement C::fun() or B::fun(). You almost certainly want fun() to be declared virtual.