Лабораторная работа № 2. Классы. Программирование линейных алгоритмов с использованием функций инициализации set() и вывода результатов print() - Технология разработки программного обеспечения систем управления

Цель Работы - изучить основные способы работы с пользовательским типом данных "класс", его объектами, методами и способы доступа к ним.

- Теоретические сведения

Основное отличие С++ от С состоит в том, что в С++ имеются классы. С точки зрения языка С классы в С++ - это структуры, в которых вместе с данными определяются функции. Это и есть инкапсуляция в терминах ООП.

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

Данные класса - это то, что класс "знает".

Функции - члены (методы) класса - это то, что класс "делает".

Таким образом, определение типа, задаваемого пользователем (class), содержит спецификацию данных, требующихся для представления объекта этого типа, и набор операций (функций) для работы с подобными объектами.

Объявление класса

Приведем пример объявления класса:

Class my_Fun

{

// компоненты-данные

Double x, y;

// компоненты-функции

Public:

// функция инициализации

Void set(char *c, double X)

{

X=X;

Y=sin(x);

}

// функция вывода результатов

Void print(void)

{

Cout << point<<y << endl;

}

};

Обычно описания классов включают в заголовочные файлы (*.H), а реализацию функций-членов классов - в файлы *.CPP.

Для каждого объекта класса устанавливается область видимости либо явно - указанием уровня доступа одним из ключевых слов public, private, protected с двоеточием, либо неявно - по умолчанию. Указание области видимости относится ко всем последующим объектам класса, пока не встретится указание другой области видимости. Область видимости public разрешает доступ к объектам класса из любой части программы, в которой известен этот объект (общедоступный). Область видимости private разрешает доступ к объектам класса только из методов этого класса. Объекты с такой областью видимости называют частными. Область видимости protected определяется для защищенных объектов, она имеет смысл только в иерархической системе классов и разрешает доступ к объектам этой области из методов производных классов. В теле класса ключевое слово области видимости может использоваться неоднократно. Область видимости для объектов типа "класс" по умолчанию private.

Способы объявления и инициализации объектов и доступ к методам класса:

1. Прямой вызов

My_Fun Fun1;//объявление объекта1,но не инициализация

Fun1.set("Function1 = ",1.0);// инициализация данных

Fun1.print(); // прямой вызов

Cout << "Input enter1..." << endl<<endl.

2. Косвенный вызов

My_Fun *p1 = &Fun1; // воспользовались объектом 1

// новая инициализация

P1->set("Function1 = ",1.0); // косвенный вызов

P1->print();

// косвенный вызов

Cout << "Input enter1..." << endl<<endl;

3 Динамическое выделение памяти

My_Fun *p1 = new my_Fun;

P1->set("Function1 = ",1.0); // косвенный вызов

P1->print();

// косвенный вызов

Cout << "Input enter1..." << endl<<endl;

// удаляется динамически выделенный объект

Delete p1;

-Задание К Лабораторной Работе

Пользовательский класс должен содержать необходимые элементы - данные, метод установки их начальных значений:

Void set(double X,);

Метод печати:

Void print(void);

Метод, решающий поставленную задачу:

Void Run(void);

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

    - Варианты Заданий 1.

При x=14,26, y= -1,22, z=3,5г, t=0,564849.

2.

При x= -4,5, y=0,75г, z=0,845, u=-55,6848.

3.

При x=3,74, y= -0,825, z=0,16, v=1,0553.

4.

При x=0,4, y= -0.875, z= -0,475, w=1,9873.

5.

При x= -15,246, y=4,642, z=20.001, = -182.036.

    6. 7. При x=16,55, y= -2,75, z=0,15, = - 40,630. 8.

При x=0,1722, y=6,33, z=3,25, = -205,305.

9.

При x= -2,235, y=2,23, z=15,221, =39,374.

10.

При x=1,825, y=18,225, z= -3,298, =1,2131.

11.

При x=6,251, y=0,827, z=25,001, b=0,7121.

12.

При x=3,251, y=0,325, z=0,466, c = 4,25.

13.

При x=17,421, y=10,365, z=0,828, f=0,33056.

14.

При X=12,3, Y=15,4, z=0,252, G=82,8257.

15.

При x=2,444, y=0,869, z= -0,13, -0,49871.

Контрольные вопросы

    1. Что значит в ООП понятие "класс", и какой формат его объявления в программе? 2. Что такое объект класса, что он содержит? 3. Какие существуют уровни доступа к объектам и методам класса? (Дать характеристику каждому). 4. Что такое операция привязки, ее основное назначение? 3. Лабораторная Работа3. Классы. Программирование Линейных Алгоритмов С Использованием Конструктора, Деструктора, Friend - Функции Инициализации Set() И Функции Вывода Результатов Print()

Цель Работы - изучить основные способы работы по созданию конструктора класса с захватом динамической памяти и деструктора для ее освобождения, применение friend - функции и изучение ее особенностей.

Теоретические сведения

Конструктор Класса

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

Class my_Fun

{

// компоненты-данные

Double x;

Unsigned size;

Public:

// объявление конструктора 1 (с параметрами)

My_Fun (double X=0);

// объявление конструктора 2 (без параметров)

My_Fun(void);

// объявление и описание деструктора

~my_Fun ()

{

Cout<<"Destroyed object... "<<endl;

}

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

My_Fun::my_Fun (double X)

{

Cout<<"Constructor1...."<<endl;

X=X;

}

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

My_Fun::my_Fun (void)

{

Cout<<"Constructor2..."<<endl;

X=5.0;

}

}

Деструктор класса

Еще одним специальным методом класса является деструктор. Деструктор вызывается перед освобождением памяти, занимаемой объектной переменной, и предназначен для выполнения дополнительных действий, связанных с уничтожением объектной переменной: например, для освобождения динамической памяти, закрытия, уничтожения файлов и т. п. Деструктор всегда имеет то же имя, что и имя класса, но перед именем записывается знак ~ (тильда). Деструктор не имеет параметров и, подобно конструктору не возвращает никакого значения.

Таким образом, деструктор не может быть перегружен и должен существовать в классе в единственном экземпляре. Деструктор вызывается автоматически при уничтожении объекта. Таким образом, для статически определенных объектов деструктор вызывается, когда заканчивается блок программы, в котором определен объект (блок в данном случае - составной оператор или тело функции). Для объектов, память для которых выделена динамически, деструктор вызывается при уничтожении объекта операцией delete.

Дружественная Функция (friend)

В языке С++ одна и та же функция не может быть компонентом двух разных классов. Чтобы предоставить функции возможность выполнения действий над различными классами, можно определить обычную функцию языка С++ и предоставить ей право доступа к элементам класса типа private, protected. Для этого нужно в описании класса поместить заголовок функции, перед которым поставить ключевое слово friend.

Дружественная функция не является методом класса, не зависит от позиции в классе и спецификаторов прав доступа. Friend - функции получают доступ к членам класса через указатель, передаваемый им явно. Можно сделать все функции класса Y друзьями класса X в одном объявлении.

- Задание К Лабораторной Работе

Общая постановка. Пользовательский класс Х должен содержать необходимые элементы - данные, которые создаются в динамической области памяти, конструктор для их создания (операция new) и установки их начальных значений: Х(), деструктор: ~ Х (), friend - функция печати: friend void print(), функция, решающая поставленную задачу: friend Void Run().

Код методов и функций - вне пространства определения класса.

- Варианты заданий

Варианты заданий используются из лабораторной работы № 2.

    - Контрольные вопросы 1. Что такое "конструктор", формат объявления, его особенности? 2. Формат объявления деструктора, его назначение. 3. Особенности дружественных функций, доступ к закрытой части класса. 4. Каким образом дружественная функция получает доступ к закрытой части класса?

Похожие статьи




Лабораторная работа № 2. Классы. Программирование линейных алгоритмов с использованием функций инициализации set() и вывода результатов print() - Технология разработки программного обеспечения систем управления

Предыдущая | Следующая