Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shprora_po_proge.docx
Скачиваний:
5
Добавлен:
23.09.2019
Размер:
518.78 Кб
Скачать

Void vyvod(avto s, int I)

{ cout <<"MARKA AVTO :"<< s.marka << endl;

if (i<2) cout <<"CENA AVTO :"<< s.cena.icena << endl;

else cout <<"CENA AVTO :"<< s.cena.fcena << endl;

cout <<"RASHOD NA 100 km. :"<< s.rashod << endl;

cout <<"_____________"<< endl;

}

Int main()

{ avto A1[3];

cin >> A1[0].marka >> A1[0].cena.icena >> A1[0].rashod;

cin >> A1[1].marka >> A1[1].cena.icena >> A1[1].rashod;

cin >> A1[2].marka >> A1[2].cena.fcena >> A1[2].rashod;

for (int i=0; i<3; i++) VYVOD(A1[i],i);

cout <<"RAZMER MASSIVA A1 = "<<sizeof(A1) << endl;

cout <<"RAZMER ELEMENTA A1[0] = "<<sizeof(A1[0]) << endl;

cout <<"RAZMER ELEMENTA A1[2] = "<<sizeof(A1[2]) << endl;

cout <<"Cena avtomobilya "<< A1[1].marka <<" = "

<< A1[1].cena.icena << endl;

cout <<"Cena avtomobilya "<< A1[2].marka <<" = "

<< A1[2].cena.fcena << endl;

return 0;

}

4.Правила объявления класса в языке C++.

Класс представляет собой определяемый пользователем тип данных, который обычно содержит переменные-члены и функции-члены с определенными разделенными правами доступа (!!!).

Например: (ранее мы использовали structavto {…}, теперь определим соответствующий класс)

classavto {

char name [15];

Intcena;

double rashod;

};

Int main()

{ …

avto a1; // объявлениеобъекта a1 класса avto

a1.cena=12600; // будет ошибка, т.к. доступ закрыт

}

В данном случае будет фиксироваться ошибка, поскольку при выполнении оператора присваивания a1.cena=12600 осуществляется попытка доступа к закрытой переменной-члену класса avto. В этом варианте необходимо перед charname [15] записать public:.

Итак, можно сказать, что класс – это тип, переменные которого являются объектами (или экземплярами класса). При определении классов должен использоваться следующий синтаксис:

сlassимя_класса {

public:

член_класса_1; открытые члены класс

private:

член_класса_n+1; закрытые члены класса

};

Каждая строка вида член_класса_i представляет либо объявление переменной-члена класса, либо прототип функции-члена, либо объявление функции-члена. Отметим, что в определении класса может находиться любое количество ключевых слов public и private.

При определении класса рекомендуется объявлять закрытымипеременные-члены и объявлять открытымифункции-члены, которые обеспечивают доступ к закрытым членам класса.Среди функций-членов класса отдельно выделяют конструкторы и деструктор. Конструкторы и деструкторы подразделяются наявные и неявные.

5. Конструкторы и деструкторы класса в языке C++.

Неявные конструкторы и деструкторы формируются компилятором автоматически. Неявный конструктор всегда автоматически запускается на выполнение в момент определения объекта и формирует “заготовку” объекта в памяти компьютера.

После этого автоматически запускается явный конструктор (при условии, что он существует). Явный конструктор позволяет “внести” программисту нужные дополнения в ранее сформированную неявным конструктором “заготовку” объекта. Разрешается предусматривать перегрузку конструкторов, что обеспечивает максимально гибкий механизм для формирования объектов.

!!! Таким образом, в классе разрешается определять несколько перегружаемых конструкторов.

Неявный деструктор всегда автоматически запускается при достижении конца блока, в котором определен соответствующий объект. Он освобождает память, занимаемую элементами объекта. В классе можно определить один явный деструктор, который автоматически вызывается перед выполнением неявного деструктора.

Чаще всего функции-члены класса, включая конструкторы и деструкторы, определяются вне тела класса. Однако допускается и внутри. Если функция-член определяется вне класса, то, во-первых, внутри класса объявляется прототип, и, во-вторых, определение функции начинается с имени класса, за которым следует оператор разрешения области видимости:: (два подряд двоеточия), а далее размещается имя функции и ее параметры.

!!! Отметим, что конструктор имеет тоже имя, что и соответствующий класс, а имя деструктора также совпадает с именем класса, но перед первым символом ставится ~ (тильда). Отметим, что в заголовках конструкторов и деструкторов отсутствует указание на тип возвращаемого значения. Механизмы вызова конструктора и деструктора отличаются от механизма вызова обычной функции-члена класса.

Демонстрируется использование явного

// конструктора и явного деструктора класса.

// !!! Любой функции-члену класса (включая конструкторы и деструкторы) доступна переменная-член этого класса,т.е. любому методу класса напрямуюдоступно любое поле этого класса

#include<iostream>

usingnamespace std;

class avto

{

public: avto();// прототип явного конструктора

класса avto

~avto(); // прототип явного деструктора класса avto

private:

char marka[15];

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]