ВУЗ:
Составители:
Рубрика:
Из табл. 2 видно,что в отношении производных типов специ-
фикатор доступа члена базового типа определяет лишь потенци-
альный статус этого члена.Его фактический статус в производном
типе зависит от спецификатора доступа типа,указываемого в за-
головке производного типа,и определяется следующим образом.Ес-
ли тип объявляется базовым для некоторого другого со специфи-
катором типа public,то личные члены базового типа становятся
личными членами производного типа,а защищенные члены базового
типа - защищенными членами производного типа.Если же тип объ-
является для некоторого другого типа базовым со спецификатором
доступа private,то личные и защищенные члены базового типа
становятся личными членами производного типа.
Расмотренная система разграничения доступа к членам сос-
тавных типов легко может быть нарушена путем включения в оп-
ределение этого типа нового члена,являющегося описанием(или
даже определением) некоторой внешней функции с ключевым сло-
вом friend(друг).Функция-друг не имеет никаких особенностей,
помимо права доступа к любой,в том числе закрытой части
типа.В частности,функция-друг не имеет указателя this(если
только она не является полноправным членом типа).Описание
функции-друга вводит имя функции в самой внешней области ви-
димости программы и сопоставляется с другими описаниями или
определением этого имени.Описание друга может располагаться
или в закрытой,или в открытой части описания класса:где имен-
но,значения не имеет.
Необходимость использования таких функций определяется
тем,что в языке С++ одна и та же функция не может быть од-
новременно членом двух и более классов,как это требуется,на-
пример,в следующем варианте умножения классов вектор и мат-
рица:
class matrix;/*-предварительное описание класса матрицы; */
class vector /*-определение класса вектор: */
{ float v[4];
float operator[](int i) { return v[i]; }
/* Необходимые функции члена класса вектор; */
friend vector multiply(matrix&,vector&);
};/*-конец определения класса вектор; */
21
Из табл. 2 видно,что в отношении производных типов специ-
фикатор доступа члена базового типа определяет лишь потенци-
альный статус этого члена.Его фактический статус в производном
типе зависит от спецификатора доступа типа,указываемого в за-
головке производного типа,и определяется следующим образом.Ес-
ли тип объявляется базовым для некоторого другого со специфи-
катором типа public,то личные члены базового типа становятся
личными членами производного типа,а защищенные члены базового
типа - защищенными членами производного типа.Если же тип объ-
является для некоторого другого типа базовым со спецификатором
доступа private,то личные и защищенные члены базового типа
становятся личными членами производного типа.
Расмотренная система разграничения доступа к членам сос-
тавных типов легко может быть нарушена путем включения в оп-
ределение этого типа нового члена,являющегося описанием(или
даже определением) некоторой внешней функции с ключевым сло-
вом friend(друг).Функция-друг не имеет никаких особенностей,
помимо права доступа к любой,в том числе закрытой части
типа.В частности,функция-друг не имеет указателя this(если
только она не является полноправным членом типа).Описание
функции-друга вводит имя функции в самой внешней области ви-
димости программы и сопоставляется с другими описаниями или
определением этого имени.Описание друга может располагаться
или в закрытой,или в открытой части описания класса:где имен-
но,значения не имеет.
Необходимость использования таких функций определяется
тем,что в языке С++ одна и та же функция не может быть од-
новременно членом двух и более классов,как это требуется,на-
пример,в следующем варианте умножения классов вектор и мат-
рица:
class matrix;/*-предварительное описание класса матрицы; */
class vector /*-определение класса вектор: */
{ float v[4];
float operator[](int i) { return v[i]; }
/* Необходимые функции члена класса вектор; */
friend vector multiply(matrix&,vector&);
};/*-конец определения класса вектор; */
21
Страницы
- « первая
- ‹ предыдущая
- …
- 19
- 20
- 21
- 22
- 23
- …
- следующая ›
- последняя »
