2010-02-23 38 views
14

Có cách nào để xác định một lớp Foo trong C++ đểC++ đa kế thừa ngăn chặn kim cương

  1. tôi có thể kế thừa từ nó
  2. tôi có thể không phải là "kim cương kế thừa" từ nó

Tức là

class Cat: public Foo{} // okay 
class Dog: public Foo{} // okay 
class Weird: public Cat, public Dog {} // I want this to throw a compiler error 
+0

@vava: chỉnh sửa đẹp, không nhận ra 1. 2. auto itemizes – anon

+0

Bạn * không * muốn sử dụng thừa kế ảo hoặc bạn không biết về nó? – Duck

+0

Tôi không biết về nó. Tuy nhiên, tôi cũng muốn nhận được một lỗi trình biên dịch. Lớp cơ sở "Foo" tôi đang kế thừa từ là một con trỏ được tính toán lại xâm lấn. Tôi không nên có hai trường hợp của nó trong một đối tượng. – anon

Trả lời

6

Cprogramming.com Hướng dẫn: Giải quyết các vấn đề kim cương trong C++ với ...

http://www.cprogramming.com/tutorial/virtual_inheritance.html

Hãy thử này

Đối với vấn đề loại này có thể tránh hoặc giải quyết bằng cách giao diện.

+0

Tuyệt vời. Tôi đã không nhận ra có thừa kế "ảo". – anon

+0

Vấn đề là thừa kế 'ảo' nằm trong tay những người lấy được, bạn không thể làm gì để thay đổi điều đó ... vì vậy chỉ hy vọng những người viết các lớp phái sinh đọc nhận xét của bạn;) –

Các vấn đề liên quan