Mã sau có bị ảnh hưởng tiêu cực do thiếu kế thừa ảo không?Thừa kế ảo có cần thiết khi các lớp cơ sở không chứa thành viên dữ liệu không?
Nếu vậy, sẽ tác động tiêu cực giống như (hoặc tệ như) những tác động tiêu cực của đa kế thừa mà không thừa kế ảo nếu class A
đã chứa dữ liệu thành viên?
class A
{
public :
virtual ~A () { }
virtual int foo () const = 0 ;
} ;
class B : public A
{
public :
virtual ~B () { }
} ;
class C : public A
{
public :
virtual ~C () { }
} ;
class D : public B , public C
{
public :
virtual int foo () const { return 12 ; }
} ;
Có vẻ [như bạn làm cần 'virtual' thấy ở đây] (http://coliru.stacked-crooked.com/view?id=8bd2970b897e9b44), đó là nếu bạn mong đợi một con trỏ đến A bắt nguồn từ B để có cùng giá trị như thể nó được bắt nguồn từ C. – Niall
Bằng cách, bạn cần khai báo một destructor ảo với một thực hiện trống trong A. Xem http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors – Notinlist
@Notinlist Cảm ơn bạn đã nắm bắt. Tôi đã thêm các destructor ảo vào A, B và C để đảm bảo an toàn. – Giffyguy