Объектно-ориентированное программирование на языке С++. Лясин Д.Н - 25 стр.

UptoLike

Составители: 

25
//Определение областей видимости компонент для класса, объявленного через class
class MyClass
{ … //здесь определяются частные компоненты класса
protected:
… //здесь определяются защищенные компоненты класса
public:
… //здесь определяются общедоступные компоненты класса
private:
… //здесь определяются частные компоненты класса
};
Изменим тело класса array так, чтобы он полностью удовлетворял требова-
ниям принципа инкапсуляции.
//Листинг 10.Переопределение класса «массив целых чисел» с ограничением прав доступа к
//внутренней реализации объекта
class array
{ int *mas, n;
public:
array(int k) {…} //конструктор и деструктор должны быть общедоступными.
~array() {…} // Иначе нельзя будет создать и уничтожить объект класса
ReadMas() {…}
WriteMas(){…}
};
main()
{array m(5);
m.n=10; //Ошибка!!! Компонент n частный и доступ к нему из функции main запрещен
m.ReadMas(); // Метод RadMas – общедоступный, что допускает обращение к нему
из
// внешней функции main()
}
После определения класса приведенным в последнем примере способом, об-
ращение к компонентам n и mas разрешено только из методов класса. Функция
main() не является методом класса и обращаться в ней к частным компонентам
класса запрещено, что и отмечено в примере. Попытка откомпилировать данный
пример приведет к ошибке на этапе компиляции программы «array::n is not acces-
sible»
В языке С++ существует возможность обращения к частным компонентам
класса из функций, не являющихся методом данного класса, такие функции назы-
ваются дружественными, подробнее речь о них пойдет в главе 3.6.
//Определение областей видимости компонент для класса, объявленного через class
class MyClass
  { … //здесь определяются частные компоненты класса
   protected:
    … //здесь определяются защищенные компоненты класса
   public:
    … //здесь определяются общедоступные компоненты класса
   private:
    … //здесь определяются частные компоненты класса
  };
         Изменим тело класса array так, чтобы он полностью удовлетворял требова-
ниям принципа инкапсуляции.
//Листинг 10.Переопределение класса «массив целых чисел» с ограничением прав доступа к
//внутренней реализации объекта
       class array
       { int *mas, n;
         public:
          array(int k) {…} //конструктор и деструктор должны быть общедоступными.
          ~array() {…} // Иначе нельзя будет создать и уничтожить объект класса
           ReadMas() {…}
           WriteMas(){…}
       };
       main()
       {array m(5);
         m.n=10; //Ошибка!!! Компонент n частный и доступ к нему из функции main запрещен
         m.ReadMas(); // Метод RadMas – общедоступный, что допускает обращение к нему из
                        // внешней функции main()
       }
         После определения класса приведенным в последнем примере способом, об-
ращение к компонентам n и mas разрешено только из методов класса. Функция
main() не является методом класса и обращаться в ней к частным компонентам
класса запрещено, что и отмечено в примере. Попытка откомпилировать данный
пример приведет к ошибке на этапе компиляции программы «array::n is not acces-
sible»
         В языке С++ существует возможность обращения к частным компонентам
класса из функций, не являющихся методом данного класса, такие функции назы-
ваются дружественными, подробнее речь о них пойдет в главе 3.6.




                                            25