2009-02-28 28 views
14

Giả sử tôi có một lớp Base:Tình bạn có được thừa hưởng trong C++ không?

class Base { 
    friend SomeOtherClass; 
}; 

Và có khác (khác nhau) lớp kế thừa từ Base:

class AnotherClass : public Base {} 

là tình bạn được thừa kế không?

+0

Một câu hỏi khác đáng lẽ phải được trả lời dễ dàng bằng cách sử dụng COMPILER. – shoosh

+8

@shoosh: trình biên dịch không nhất thiết phải tuân theo các tiêu chuẩn. Một câu hỏi như vậy nên được trả lời theo tiêu chuẩn, không phải là trình biên dịch. –

+0

@shoosh Trình biên dịch nào? VS cho windows hoặc g ++ cho unix? Phiên bản nào của chuẩn C++? Có nhiều câu hỏi bạn có thể hỏi ngay cả khi trình biên dịch của bạn hoạt động hoặc không hoạt động. – user3728501

Trả lời

19

Về nguyên tắc, một lớp được thừa kế được thừa hưởng tất cả các thành viên của một lớp cơ sở trừ:

* its constructor and its destructor 
* its operator=() members 
* its friends 

Vì vậy, không có. Bạn bè không được kế thừa.

+5

Thật thú vị khi bạn chọn từ ngữ chính xác để nói rằng trang web này: http://www.cplusplus.com/doc/tutorial/inheritance/ – dicroce

+0

Có lẽ một câu hỏi hay để hỏi bây giờ là bạn có thể làm cho nó như vậy mà tình bạn được thừa hưởng ? Nó chắc chắn sẽ hữu ích cho những gì tôi đang làm thay vì viết ra một danh sách tất cả các lớp tôi muốn có "tình bạn". – user3728501

7

Không nó không phải là, như ghi nhận ở đây: http://www.parashift.com/c++-faq-lite/friends.html#faq-14.4

+0

Ví dụ trong liên kết hiển thị trường hợp ngược lại với câu hỏi của OP. Tôi muốn thêm rằng 'SomeOtherClass' sẽ có quyền truy cập vào các trường' Base' và các phương thức được thừa hưởng trong các đối tượng 'AnotherClass'. –

9

Không nó không phải là.

Edit: Để trích dẫn từ ++ Chuẩn C, phần 11,4/8

Hữu không phải là di truyền cũng không bắc cầu.