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?
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?
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.
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
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
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
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'. –
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.
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
@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. –
@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