Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по инфе 3 семестр.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
203.37 Кб
Скачать

Классы в C++

Разделы класса

Public ( компонент может быть использован любой функцией) { открытый раздел}

Private ( компонент может быть использован только методами и друзьями класса)

Рrotected ( то же самое, что Private + компоненты доступны из производных классов).

Хорошим стилем считается описывать данные в закрытых разделах (private или protected), а методы в открытых(public).

Обычно описание класса помещают в заголовочный файл{*.h}, а реализацию методов класса помещают в файл{*.cpp}

Конструирование класса, моделирующего работу устройства

Устройство: принтер

Переменные, определяющие состояние устройства:

наличие электропитания (да,нет)

наличие бумаги (да, нет)

выполнение задания на печать (да, нет)

Методы:

включить/выключить

добавить бумагу

убрать бумагу

отправить задание на печать

остановить печать

просмотреть текущее состояние принтера

class Printer

{

private:

char model[15]; //модель принтера

int year; //год выпуска

int status; //состояние принтера

public:

void init_printer(char* _model, int _year);

void set_print();

void stop_print();

void show();

};

Замечание. Если раздел private включен в объявлении класса первым, ключевое слово private можно опустить:

class Printer

{char model[15]; //модель принтера

Int year; //год выпуска

int status; //состояние принтера

public:

void init_printer(char*_model,int_year);

void set_print();

void stop_print();

void show();};

Описание методов:

void Printer::init_printer(char* _model,int _year)

{strcpy(model,_model); //инициализация свойства model

year=_year; //инициализация свойства year

status=0; //начальное состояние – готов к печати}

void Printer :: set_print()

{if (!status) status=1;}

void Printer :: stop_print()

{status = 0;}

void Printer :: show()

{cout<<"Model:"<<model<<"year:"<<year<<"status:"<<status<<endl;}

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

int main(void)

{

Printer printer; //создание объекта

//инициализация свойств объекта

printer.init_printer("HP5P", 1999);

printer.show(); //вызов метода объекта

printer.set_print();

printer.show();

printer.set_print();

printer.show();

printer.stop_print();

printer.show();

return 0;}

В результате работы программы на экране появятся 4 строки текста:

Model: HP5P year: 1999 status: 0,

Model: HP5P year: 1999 status: 1,

Model: HP5P year: 1999 status: 1,

Model: HP5P year: 1999 status: 0.

Конструктор

Для создания объекта используется специальный метод, называемый конструктором. Узнать конструктор несложно – его имя совпадает с именем класса и для него не указывается тип возвращаемого значения.

Конструктор по умолчанию

Реализация

Person::Person ()

{}

или

Person::Person ()

{

Name = new char[7];

strcpy(Name,”Noname”);

Year = 0;}

Вызов конструктора по умолчанию

Person MyPerson;

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

Реализация

Person::Person (char* N, int Y)

{Name = new char[strlen(N)+1];

strcpy (Name, N);

Year = Y;}

Вызов конструктора с параметрами

Person MyPerson(“Ann”,1990);

Конструктор с параметрами по умолчанию

Реализация конструктора

Person::Person (

char* N=“Noname”, int Y=0)

{Name = new char[strlen(N)+1];

strcpy (Name, N);

Year = Y;}

Вызов конструктора

Person MyPerson (“Ann”,1990); // или

Person MyPerson;

Конструктор со списком инициализации Реализация конструктора

Person::Person (

char* N, int Y): Name(new char[strlen(N)+1]),Year(Y)

{ //Если свойство Name - указатель

strcpy(Name,N);}

Вызов конструктора

Person MyPerson (“Ann”,1990);

Копирующий конструктор

Реализация

Person::Person (const Person& P)

{Name = new char[strlen(P.Name)+1];

strcpy (Name, P.Name);

Year = P.Year;}

Вызов копирующего конструктора

Person MyPerson(“Ann”,1990);

Person NewPerson(MyPerson);

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

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

Вызывается конструктор в момент создания объекта класса.