Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика. Базовый курс. Ч.3. Основы алгоритмизации и про- граммирования в среде Visual C++ 2005.pdf
Скачиваний:
53
Добавлен:
05.02.2023
Размер:
3.81 Mб
Скачать

108

b->summa(); cout<<"\n"; return 0; }

void Sum :: summa()

{s=x+y;

cout<<Rus("\n сумма ")<<x; cout<<Rus(" и " )<<y; cout<<Rus(" равна:")<<s; }

char* Rus(const char* str)

{AnsiToOem(str, str_rus); return str_rus; }

15.3. Конструкторы и деструкторы

Объявление класса не производит выделения памяти. Это происходит потом, когда мы, на основе объявленного класса, проводим описание переменной.

Поэтому при объявлении класса нельзя сразу производить инициализацию (присваивание данных) для объекта. Но если в определение класса включить функцию-член специального вида, известную как конструктор, то она автоматически вызывается при объявлении объекта данного класса. Конструктор определяется так же, как и любая другая функция-член; существует лишь два отличия:

1)имя конструктора должно совпадать с именем класса,

2)определение конструктора не может иметь возвращаемого значения. Более того, в начале прототипа функции или в ее заголов-

ке не должно присутствовать никакого типа, даже void.

Например, для класса Sum описание конструктора может выглядеть так:

Sum (int x2=0, int y2)

{x=x2; y=y2; }

Далее конструктор Sum() можно вызвать двумя способами: Sum A=Sum(1,2) и Sum A(1,2). В обоих случаях создается объект А, элементы данных x и y которого получают начальные значения 1 и 2 соответственно. А можно было и так: Sum A(,2), т.к. первый параметр задан сразу при описании конструктора(x2=0). В одном классе может быть несколько конструкторов.

109

Внутри класса могут быть и так называемыедеструкторы. Деструкторы уничтожают объекты класса и освобождают занимаемую ими память. Деструктор представляет собой метод с именем, совпадающий с именем класса, перед которым стоит символ~ (тильда). Деструктор не должен иметь ни параметров, ни типа возвращаемого значения. Например, для класса Sum деструктор имеет вид: ~Sum () {}.

Пример 15.4. Создать программу для расчета произведения ви-

да s = a×b + c×k + a×c

// применение конструктора и деструктора

#include <iostream> #include <windows.h> using namespace std;

char* Rus(const char* str); char str_rus[256];

class Pro

{private:

int x,y,z; public:

// прототипы методов

Pro(int,int); // конструктор int putx(); //доступ к x int puty(); //доступ к y int putz(); //доступ к z

void proizv(); // произведение

~Pro(); // деструктор

}; // описание методов

Pro::Pro(int x1,int y1){x=x1; y=y1;} int Pro::putx(){return x;}

int Pro::puty(){return y;} int Pro::putz(){return z;} void Pro::proizv(){z=x*y;} Pro::~Pro(){}

int main() {int s,a,b,c,k;

cout << Rus("\n введите a,b,c,k \n"); cin>>a>>b>>c>>k;

Pro D=Pro(a,b);

//создание и иницализация объекта D

Pro E(c,k);

//создание и иницализация объекта E

Pro F(a,c);

//создание и иницализация объекта F

D.proizv();

// получение произведения a*b

E.proizv();

// получение произведения c*k

F.proizv();

// получение произведения a*c