Hi mọi người, vừa qua trong quá trình tìm hiểu downcast mình có một thắc mắc nhỏ như sau:
Giả sử mình có 2 class A và B kế thừa A :
class A{
public:
virtual void Func() { cout << "in A" << endl; }
};
class B : public A
{
public:
virtual void Func() { cout << "in B" << endl; }
void Jump() {cout << "B can fly" << endl;}
};
Trong hàm main() mình thực hiện như sau:
A* ob = new A();
if (dynamic_cast<B*>(ob) == NULL)
cout << "Null" << endl;
dynamic_cast<B*>(ob)->Jump();
Như vậy mình đã thực hiện downcast con trỏ ob từ kiểu Base xuống Derive. Kết quả của việc cast này trả ra Null nhưng khi mình dùng nó để truy xuất hàm Jump thì vẫn truy xuất thành công??? Đây là điều mà mình thắc mắc tại sao lại có thể truy xuất được bằng con trỏ Null!?
Bên cạnh đó, khi mình dùng con trỏ này truy xuất 1 hàm virtual, cụ thể là hàm Func() thì bị dump ngay