Московский государственный университет имени М.В.Ломоносова
Опубликован: 01.11.2004 | Доступ: свободный | Студентов: 11271 / 455 | Оценка: 4.12 / 4.01 | Длительность: 19:20:00
ISBN: 978-5-9556-0077-9
Специальности: Программист
Лекция 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 >
Александр Демьяненко
Александр Демьяненко

Можно ли сдавать один и тот же тест несколько раз?
Или же один и тот же тест можно сдать лишь однажды?

Максим Стогний
Максим Стогний

Добрый день!

Скажите, пожалуйста, если в терминологии объектно-ориентированного программирования функции также называются методами или методами - членами класса, в примере объявления указателя на метод использовали в формальном описании оба названия:

тип_метода (имя_класса::*имя_метода_указателя)
    (список параметров);
тип_функции (*имя_ функции_указателя)
    (список параметров);

при этом можно было  тип_функции во втором описании заменить на тип_метода? Т.е.:

тип_метода (*имя_ метода_указателя)
    (список параметров);