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

UptoLike

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

23
//Листинг 8. Вызов деструктора объекта
main()
{MyClass m; //создание объекта статически
MyClass *ptm=new MyClass; //создание объекта динамически
delete ptm; //вызов деструктора для динамического объекта
//вызов деструктора для статического объекта
}
Определим деструктор для класса array.
struct array
{ …
~array()
{delete []mas;
}
};
Деструктор в отличие от конструктора допускает явный вызов вида:
имя_обекта.~имя_класса()
адрес_объекта->~имя_класса()
3.3. Область видимости компонент класса
У рассмотренного выше класса array есть еще один существенный недоста-
токвсе компоненты этого класса являются общедоступными. Это означает,
что к любому компонентному данному объекта можно обратиться, например
,
из функции main(), минуя вызов методов класса.
//Листинг 9. Нарушение принципа инкапсуляции
main()
{ array m(10);
delete m.mas;
for(int i=0;i<m.n;i++)
cin>>m.mas[I];
}
Таким образом, проигнорировав интерфейс объекта, программист может ра-
ботать с компонентными данными, и целостность объекта не может быть гаранти-
рована. Выход из создавшегося положения уже известеннеобходимо выделить в
//Листинг 8. Вызов деструктора объекта
  main()
   {MyClass m; //создание объекта статически
     MyClass *ptm=new MyClass; //создание объекта динамически
      …
     delete ptm; //вызов деструктора для динамического объекта
      …
    //вызов деструктора для статического объекта
   }
      Определим деструктор для класса array.
   struct array
   {…
        ~array()
        {delete []mas;
         }
             …
   };
   Деструктор в отличие от конструктора допускает явный вызов вида:
         имя_обекта.~имя_класса()
         адрес_объекта->~имя_класса()


      3.3. Область видимости компонент класса


      У рассмотренного выше класса array есть еще один существенный недоста-
   ток – все компоненты этого класса являются общедоступными. Это означает,
   что к любому компонентному данному объекта можно обратиться, например,
   из функции main(), минуя вызов методов класса.
   //Листинг 9. Нарушение принципа инкапсуляции
   main()
     { array m(10);
       delete m.mas;
       for(int i=0;i>m.mas[I];
     }

      Таким образом, проигнорировав интерфейс объекта, программист может ра-
ботать с компонентными данными, и целостность объекта не может быть гаранти-
рована. Выход из создавшегося положения уже известен – необходимо выделить в


                                            23