Наследуется ли дружба в C++?

Предположим, у меня есть класс Base:

class Base {
    friend SomeOtherClass;
};

И есть еще один (другой) класс, который наследуется от Base:

class AnotherClass : public Base {}

Дружба тоже передается по наследству?


person tunnuz    schedule 28.02.2009    source источник
comment
Еще один вопрос, на который нужно было легко ответить с помощью КОМПИЛЯТОРА.   -  person shoosh    schedule 28.02.2009
comment
@shoosh: компиляторы не обязательно соответствуют стандартам. На такой вопрос должен отвечать стандарт, а не компиляторы.   -  person Hosam Aly    schedule 01.03.2009
comment
@shoosh Какой компилятор? VS для Windows или g++ для Unix? Какая версия стандарта С++? Есть много вопросов, которые вы можете задать, даже если ваш компилятор работает или не работает.   -  person FreelanceConsultant    schedule 23.08.2015
comment
Возможно, сейчас стоит задать вопрос: можете ли вы сделать так, чтобы дружба передавалась по наследству? Это, безусловно, было бы полезно для того, чем я занимаюсь, вместо того, чтобы составлять список всех классов, с которыми я хочу подружиться.   -  person FreelanceConsultant    schedule 23.08.2015


Ответы (3)


В принципе, производный класс наследует всех членов базового класса, кроме:

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

Итак, нет. Друзья не передаются по наследству.

person simplyharsh    schedule 28.02.2009
comment
Интересно, что вы выбрали точную формулировку, чтобы сказать, что на этом веб-сайте: cplusplus.com/doc/ учебник/наследие - person dicroce; 25.04.2009
comment
Возможно, сейчас стоит задать вопрос: можете ли вы сделать так, чтобы дружба передавалась по наследству? Это, безусловно, было бы полезно для того, чем я занимаюсь, вместо того, чтобы составлять список всех классов, с которыми я хочу подружиться. - person FreelanceConsultant; 23.08.2015

Нет, это не так.

Изменить: Цитата из стандарта C++, раздел 11.4/8.

Дружба не является ни наследуемой, ни переходной.

person Community    schedule 28.02.2009

Нет, как описано здесь: http://www.parashift.com/c++-faq-lite/friends.html#faq-14.4

person Daniel Bruce    schedule 28.02.2009
comment
Пример в ссылке показывает случай, противоположный вопросу ОП. Я хотел бы добавить, что SomeOtherClass будет иметь доступ к Base полям и методам, унаследованным от объектов AnotherClass. - person Hosam Aly; 28.02.2009