Деструкторы

Деструктор - это метод класса, именем которого является имя класса, предваренное символом ~. Вызов деструктора производится при уничтожении объекта. Деструктор не имеет ни аргументов, ни возвращаемого значения. Деструкторы выполняют действия перед разрушением объекта. Деструктор автоматически вызываются компилятором в следующих случаях:

- при выходе из области видимости объекта;

- при создании временных объектов при передаче аргументов функциям.

Деструкторы не могут быть виртуальными.

Рассмотрим пример с использованием конструктора и деструктора:

Пример 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). К таким функциям можно обращаться непосредственно через имя класса. Могут быть объявлены как виртуальные.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: