I have the following code:
class A
{
};
class B : public A
{
public:
virtual void f() {}
};
int main()
{
A* a = new A();
B* b = static_cast<B*>(a);
b->f();
}
This program fails with a segmentation fault. There are two solutions to make this program work:
However, both are not an option. I assume that this does not work because of a lookup in the vtable.
(In the real program, A does also have virtual functions. Also, the virtual function is not called in the constructor.)
Is there a way to make this program work?
You can't do that because the object you create is A, not B. Your cast is invalid-- an object of A (created with new) cannot magically become an object of B.
Did you mean the A* a = new A() to actually be A* a = new B()? In that case, I would expect it to work.
You can't do that.
In your example, a is a object of class A. Not B. Casting it to B does not make it a B.
If you want to use polymorphic object behaviors, then you can give virtual function f to class A, and you can use code like A* a = new B();
Then you can use the virtual functions through the a pointer to get behavior from class B.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With