Московский государственный университет имени М.В.Ломоносова
Опубликован: 03.10.2006 | Доступ: свободный | Студентов: 1224 / 79 | Длительность: 09:08:00
Специальности: Программист
Лекция 11:

C++: методы-члены класса, дружественные классы и члены класса

< Лекция 10 || Лекция 11: 123 || Лекция 12 >

Дружественные члены класса

Дружественные члены класса (методы) позволяют получить доступ к защищенным модификатором private членам класса из методов других классов. Методы и классы, объявляемые дружественными, иногда также называются друзьями класса.

Если метод класса A внутри тела класса B объявляется с модификатором friend, что указывает на то, что он является другом класса, то из него разрешен доступ ко всем членам класса B.

Например:

class A { public: int Fx();}
class B { public: friend int A::Fx();
    private:
}

Дружественные классы

Объявление дружественного класса позволяет всем его методам получить доступ ко всем переменным и методам другого класса.

Например:

class A {public: int Fx();}
class B {public:
    friend class A;
    private:
        }

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

Например:

class A {public: 
    // Класс расположен во внешней 
    // области видимости
    int Fx1();
        }
namespace classB {
    class B {public:
        friend class A;
        friend class C;
        private:
    }
    class C { public:
    // Класс расположен в том же 
     // пространстве имен
        int Fx2();  
    }
}

Дружественные классы не наследуются, и их дружественность не является транзитивной.

Например:

class A {int Fx();}
class B {friend class A;}
class C {friend class B;} 
    // Класс А не является 
    // дружественным классу C
class D : public B {}  
    // Класс А не является 
    // дружественным классу D
< Лекция 10 || Лекция 11: 123 || Лекция 12 >