друг функция в производном классе с частным наследованием

Если Полученный класс наследован конфиденциально от класса Основа, и Производный класс сделал, чтобы друг функционировал f (), поэтому какие участники могут f () доступ от Производного класса и Базового класса.

class Base {
public:
    int a;
protected:
    int b;
private:
    int c;
};  


class Derived: private Base {    
    void friend f() {}

public:
    int d;
protected:
    int e;
private:
    int f;
};

Я понимаю, что, если класс наследован конфиденциально от базового класса, все является частным в производном классе.

Но почему в коде выше, функция f () может получить доступ к a, b, d, e, f, но не c?

7
задан Georg Fritzsche 26 January 2010 в 21:30
поделиться

4 ответа

'Дружба' предоставляет доступ к классу, который объявляет друга - это не переходное состояние. Использовать плохую аналогию - мои друзья не обязательно друзья моего отца.

В C++ FAQ есть немного больше деталей:

9
ответ дан 6 December 2019 в 10:00
поделиться

Функция друга имеет доступ ко всем членам , полученных . Это не имеет доступа к любым членам базы , что получено не может получить доступ. Полученные не могут получить доступ База :: C Поскольку База :: C является частным.

2
ответ дан 6 December 2019 в 10:00
поделиться

Друг Производный может получить доступ именно к тому, что Производный может получить сам - то есть любой член Производный, и любой общественный или охраняемый член любого базового класса, или любой общественный или охраняемый класс дедушек и бабушек, но не ни один частный член базового класса, или член частного класса дедушек и бабушек.

6
ответ дан 6 December 2019 в 10:00
поделиться

Частные члены не доступны в полученных классах.

2
ответ дан 6 December 2019 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: