ВУЗ:
Составители:
Рубрика:
Из табл. 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
- …
- следующая ›
- последняя »