Tôi có đoạn mã sau:Sử dụng chức năng ảo trong con sau khi đúc hoạt động trong C++
class A
{
};
class B : public A
{
public:
virtual void f() {}
};
int main()
{
A* a = new A();
B* b = static_cast<B*>(a);
b->f();
}
Chương trình này không thành công với một lỗi segmentation. Có hai giải pháp để thực hiện chương trình làm việc này:
- tuyên bố f phi ảo
- không gọi b-> f() (tức là nó không thất bại vì các diễn viên)
Tuy nhiên , cả hai đều không phải là một lựa chọn. Tôi giả định rằng điều này không hoạt động vì một tra cứu trong vtable.
(Trong chương trình thực tế, A cũng không có chức năng ảo. Ngoài ra, chức năng ảo không được gọi trong constructor.)
Có cách nào để làm cho công việc chương trình này?
+1 cho một câu hỏi 1st có định dạng đúng. –
Trong trường hợp này, bạn có thể thích dynamic_cast, mà sẽ "thất bại" (trả về null) với A * a = new A(), nhưng thành công với A * a = new B(). Bạn sẽ phải kiểm tra rằng b không phải là null trước khi gọi -> f(). – jmanning2k