Опубликован: 03.10.2006 | Уровень: специалист | Доступ: свободно | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 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 >
Адель Дубинникова
Адель Дубинникова
Россия, г. Санкт-Петербург

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
12.9921101119352watchdog( )../bootstrap.inc:0
22.9924101121816module_invoke( )../bootstrap.inc:967
32.9924101123672call_user_func_array ( )../module.inc:462
42.9924101124008devel_watchdog( )../module.inc:462
52.9925101124856decode_entities( )../devel.module:382
62.9925101126776drupal_error_handler( )../devel.module:340
72.9926101130384watchdog( )../common.inc:663
82.9926101132448module_invoke( )../bootstrap.inc:967
92.9926101134304call_user_func_array ( )../module.inc:462
102.9926101134640devel_watchdog( )../module.inc:462
112.9926101135336decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
12.9921101119352watchdog( )../bootstrap.inc:0
22.9924101121816module_invoke( )../bootstrap.inc:967
32.9924101123672call_user_func_array ( )../module.inc:462
42.9924101124008devel_watchdog( )../module.inc:462
52.9925101124856decode_entities( )../devel.module:382
62.9925101126776drupal_error_handler( )../devel.module:340
72.9926101130384watchdog( )../common.inc:663
82.9926101132448module_invoke( )../bootstrap.inc:967
92.9926101134304call_user_func_array ( )../module.inc:462
102.9926101134640devel_watchdog( )../module.inc:462
112.9926101135336decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
12.9921101119352watchdog( )../bootstrap.inc:0
22.9924101121816module_invoke( )../bootstrap.inc:967
32.9924101123672call_user_func_array ( )../module.inc:462
42.9924101124008devel_watchdog( )../module.inc:462
52.9925101124856decode_entities( )../devel.module:382
62.9932101126968drupal_error_handler( )../devel.module:340
72.9932101130656watchdog( )../common.inc:663
82.9933101132720module_invoke( )../bootstrap.inc:967
92.9933101134576call_user_func_array ( )../module.inc:462
102.9933101134912devel_watchdog( )../module.inc:462
112.9933101135688decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
12.9921101119352watchdog( )../bootstrap.inc:0
22.9924101121816module_invoke( )../bootstrap.inc:967
32.9924101123672call_user_func_array ( )../module.inc:462
42.9924101124008devel_watchdog( )../module.inc:462
52.9925101124856decode_entities( )../devel.module:382
62.9932101126968drupal_error_handler( )../devel.module:340
72.9932101130656watchdog( )../common.inc:663
82.9933101132720module_invoke( )../bootstrap.inc:967
92.9933101134576call_user_func_array ( )../module.inc:462
102.9933101134912devel_watchdog( )../module.inc:462
112.9933101135688decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
12.9938101119896watchdog( )../bootstrap.inc:0
22.9938101121960module_invoke( )../bootstrap.inc:967
32.9938101123816call_user_func_array ( )../module.inc:462
42.9938101124152devel_watchdog( )../module.inc:462
52.9939101124856decode_entities( )../devel.module:382
62.9939101126776drupal_error_handler( )../devel.module:340
72.9939101130384watchdog( )../common.inc:663
82.9939101132448module_invoke( )../bootstrap.inc:967
92.9939101134304call_user_func_array ( )../module.inc:462
102.9939101134640devel_watchdog( )../module.inc:462
112.9940101135336decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
12.9938101119896watchdog( )../bootstrap.inc:0
22.9938101121960module_invoke( )../bootstrap.inc:967
32.9938101123816call_user_func_array ( )../module.inc:462
42.9938101124152devel_watchdog( )../module.inc:462
52.9939101124856decode_entities( )../devel.module:382
62.9939101126776drupal_error_handler( )../devel.module:340
72.9939101130384watchdog( )../common.inc:663
82.9939101132448module_invoke( )../bootstrap.inc:967
92.9939101134304call_user_func_array ( )../module.inc:462
102.9939101134640devel_watchdog( )../module.inc:462
112.9940101135336decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
12.9938101119896watchdog( )../bootstrap.inc:0
22.9938101121960module_invoke( )../bootstrap.inc:967
32.9938101123816call_user_func_array ( )../module.inc:462
42.9938101124152devel_watchdog( )../module.inc:462
52.9939101124856decode_entities( )../devel.module:382
62.9946101126968drupal_error_handler( )../devel.module:340
72.9946101130656watchdog( )../common.inc:663
82.9946101132720module_invoke( )../bootstrap.inc:967
92.9946101134576call_user_func_array ( )../module.inc:462
102.9946101134912devel_watchdog( )../module.inc:462
112.9946101135688decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
12.9938101119896watchdog( )../bootstrap.inc:0
22.9938101121960module_invoke( )../bootstrap.inc:967
32.9938101123816call_user_func_array ( )../module.inc:462
42.9938101124152devel_watchdog( )../module.inc:462
52.9939101124856decode_entities( )../devel.module:382
62.9946101126968drupal_error_handler( )../devel.module:340
72.9946101130656watchdog( )../common.inc:663
82.9946101132720module_invoke( )../bootstrap.inc:967
92.9946101134576call_user_func_array ( )../module.inc:462
102.9946101134912devel_watchdog( )../module.inc:462
112.9946101135688decode_entities( )../devel.module:382