Деструктор - это метод класса, именем которого является имя класса, предваренное символом ~. Вызов деструктора производится при уничтожении объекта. Деструктор не имеет ни аргументов, ни возвращаемого значения. Деструкторы выполняют действия перед разрушением объекта. Деструктор автоматически вызываются компилятором в следующих случаях:
- при выходе из области видимости объекта;
- при создании временных объектов при передаче аргументов функциям.
Деструкторы не могут быть виртуальными.
Рассмотрим пример с использованием конструктора и деструктора:
Пример 10:
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
using namespace std;
class MArray
{
protected:
int size;
int A[50];
public:
inline int takeA(int n)// Функция возврата A[n] элемента массива
{
return A[n];
};
inline int takeA(int n,int m)//Функция возврата A[n+m] элемента массива
{
return A[n+m];
};
MArray(){size=0;};
MArray(int Size)
{
int i;
size=Size;
for(i=0;i<size;i++)
{
A[i]=i;
//C[i]=i;
}
};
~MArray(){};
};
class nasl:public MArray
{
public:
void Keyboard()
{ int i;
for(i=0;i<size;i++)
{
cin>>A[i];
}
};
void DisplayA()// функция вывода массива на экран
{
int i;
for(i=0;i<size;i++)
{
cout<<" "<<A[i];
}
};
nasl(int n):MArray(n){};
nasl(){};
~nasl(){};
};
int main()
{
int i,k,m,n;
cin>>n;
nasl a(n);
a.Keyboard();
a.DisplayA();
cout<<"Vvedite nomer elementa\n";
cin>>k;
i=a.takeA(k);
cout<<"A["<<k<<"]="<<" "<<i;
cout<<"Vvedite m & k\n";
cin>>k>>m;
i=a.takeA(k,m);
cout<<"A["<<k+m<<"]="<<" "<<i;
return 0;}
6) Объекты и классы.
6.1 Простой класс.
MArray |
# size - размер: int # A[50] – массив: int |
+ takeA(int n)- получить номер элемента: int - takeA(int n,int m)– получить номер элемента: int |
class MArray
{
protected:
int size;
int A[50];
public:
int takeA(int n)// Функция возврата A[n] элемента массива
{
return A[n];
};
private:
int takeA(int n,int m)//Функция возврата A[n+m] элемента массива
{
return A[n+m];
};
};
6.2 Объявления класса.
Класс – это новый тип, определяемый пользователем и содержащий набор данных (данные-члены, объекты) и функций (функции-члены, методы), обрабатывающих эти данные.
Определение начинается с ключевого слова class, за которым следует имя класса. Подобно структуре, тело класса заключено в фигурные скобки, после которых следует точка с запятой.
Для членов класса устанавливаются ограничения доступа к ним:
private – члены класса доступны только членам класса и дружественным функциям;
protected - члены класса доступны только членам класса и членам производного класса;
public - члены класса доступны всем функциям.
Раскроем смысл private и public.
Ключевой особенностью объектно-ориентированного программирования является возможность сокрытия данных. Этот термин понимается в том смысле, что данные заключены внутри класса и защищены от несанкционированного доступа функций, расположенных вне класса. Если необходимо защитить какие-либо данные, то их помещают внутрь класса с ключевым словом private. Такие данные доступны только внутри класса. Данные, описанные с ключевым словом public, напротив, доступны за пределами класса.
Рассмотрим пример с использованием всех трех типов доступа:
Пример 11:
class MArray
{
protected:
int size;
int A[50];
public:
int takeA(int n)// Функция возврата A[n] элемента массива
{
return A[n];
};
private:
int takeA(int n,int m)//Функция возврата A[n+m] элемента массива
{
return A[n+m];
};
};
6.3 Данные классов.
Могут находиться в private, protected, public частях класса.
К данным возможен доступ через имя класса (с использованием операции разрешения доступа "::"), а не через объекты класса.
Могут быть объявлены как const. Константные члены-данные должны быть инициализированы при каждом определении конструктора класса.
6.4 Методы классов.
Методом класса называется функция, являющаяся членом этого класса. Методы класса, вотличие от других функций, имеют доступ к закрытым членам класса. Могут относится к private, protected, public частям класса.
Могут быть определены как внутри класса, так и вне. Могут быть объявлены static. Только такие функции могут непосредственно обращаться к статическим данным класса. Статические функции-члены не могут быть
объявлены как виртуальные (virtual). К таким функциям можно обращаться непосредственно через имя класса. Могут быть объявлены как виртуальные.