Курсовая работа: Разработка классов для работы с геометрическими фигурами

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

3.2 Виртуальные функции

С++ поддерживает два вида полиморфизма:

· Статический - достигается за счет перегрузки функций и операторов;

· Динамический - достигается за счет наследования виртуальных функций;

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

Для объявления виртуальной функции вначале ставят служебное слово «virtual» в базовом классе. Фактически виртуальная функция реализует принцип «один интерфейс - несколько методов», который лежит в основе полиморфизма.

При этом в базовом классе определяется вид интерфейса т.е. способ вызова этой, а каждое переопределение в производном классе реализует конкретный метод данного класса.

При обычном вызове виртуальные функции ничем не отличаются от остальных функций класса. Особые свойства проявляются при их вызове с помощью указателей.

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

В качестве примера ниже приведено описание функции, являющейся виртуальной в классе triangle: virtual void output (double &A, double &B, double &C, double &P, double &S){};

программирование класс виртуальный интерфейс

4. Описание работы программы

Для начала работы с программой необходимо запустить «k_2.exe». После этого перед пользователем появляется следующее окно (см. Рис 1).

Рис 1 - окно «Курсовая»

Программа решает следующие задачи:

1. Вычисление сведений о треугольнике;

2. Определение средней площади для нескольких треугольников;

3. Вычисление сведений о равностороннем треугольнике;

4. Нахождение наибольшего равностороннего треугольника.

Рассмотрим подробнее решение каждой из этих задач.

1. Вычисления сведений о треугольнике.

В окне «Курсовая» есть область, которая предназначена для реализации данной задачи (см. Рис 2). Вычисление происходит по нажатию кнопки «Решить», находящейся в данной области.

Перед нажатием на кнопку пользователю необходимо ввести данные (см. Рис 3), по которым и будет выполнятся вычисление.

После нажатия на кнопку «Решить», если вы не заполнили все или хотя бы одно поле в области «Ввод данных» (см. Рис 3), откроется окно «Ошибка» (см. Рис 4). Нажав кнопку «ОК», вы сможете повторить ввод данных.

Рис 2 - область «Вычисление сведений о треугольнике»

Рис 3 - область «Ввод данных»

Рис 4 - окно «Ошибка»

Вычисление может быть не выполнено и в том случае, если по введенным данным нельзя построить треугольник (т. е. треугольник с заданными сторонами не существует). Программа и в этом случает откроет окно «Ошибка» (см. Рис 5). И после нажатия на кнопку «ОК», вы сможете повторить ввод данных.

Рис 5 - окно «Ошибка»

Если ввод данных произведен правильно, пользователь увидит результаты решения в области «Вычисление сведений о треугольнике».

2. Определение средней площади для нескольких треугольников.

Для решения данной задачи следует обратится к соответствующей области в окне «Курсовая» (см. Рис 6). В этом случае пользователь вводит данные в области «Ввод данных» (см. Рис 3) несколько раз (количество раз определят сам пользователь), после чего каждый раз нажимает на кнопку «Внести данные» (см. Рис 6). Когда все параметры для желаемого количества треугольников введены, нажав на кнопку «Решить», вы увидите результат вычислений данной задачи.

Рис 6 - область «Определение средней площади для нескольких треугольников»

После нажатия на кнопку «Внести данные» может открыться одно из окон «Ошибка» (см. Рис 4 или Рис 5), причины открытия соответствуют тем, которые описаны в задаче 1.

3. Вычисление сведений о равностороннем треугольнике.

Решение задачи выполняется в области «Вычисление сведений о равностороннем треугольнике» (см. Рис 7), которая расположена в окне «Курсовая». Вычисление производится так же, как и в задаче 1.

Рис 7 - область «Вычисление сведений о равностороннем треугольнике»

В ходе решения данной задачи пользователь может столкнутся с новой ошибкой, нажав на кнопку «Решить». Если по введенным данным нельзя будет построить равносторонний треугольник, то откроется окно «Ошибка» (см. Рис 8). После нажатия на кнопку «ОК», вы сможете повторить ввод данных.

Рис 8 - окно «Ошибка»

4. Нахождение наибольшего равностороннего треугольника.

Для реализации последней задачи, вы также найдете соответствующую область (см. Рис 9) в окне «Курсовая». Вычисление производится аналогично решению 2 задачи. И как в задаче 3, вы можете столкнутся с окном «Ошибка» (см. Рис 8).

Рис 9 - область «Нахождение наибольшего равностороннего треугольника»

В программе предусмотрена кнопка «Очистить все», после нажатии на которую, окно «Курсовая» принимает свой первоначальный вид (см. Рис 1).

Заключение

В результате выполнения данной курсовой работы был реализован класс для вычисления данных треугольника по трем сторонам. Было составлено описание класса, где предусмотрено:

· поверка существования треугольника;

· проверка: равносторонний треугольник или нет;

· вычисление углов треугольника;

· вычисление периметра треугольника;

· вычисление площади треугольника;

· нахождение наибольшего равностороннего треугольника;

· нахождение средней площади;

· вывода на экран вычисляемых результатов;

Таким образом, все задачи, поставленные в курсовой работе, выполнены.

Список литературы

1. Стивен, П. Язык программирования C++. Лекции и упражнения, 6-е изд. - М.: ООО "И.Д. Вильяме", 2012. - 1248 с.

2. Страуструп, Б. Язык программирования C++: Пер. с англ, - 3-е спец. изд. - М.: Бином, 2003. - 1104 с.

3. Павловская, Т.А. C/C++. Программирование на языке высокого уровня. - СПб.: Питер, 2003.

4. Павловская, Т.А., Щупак, Ю. А. C++. Объектно-ориентированное программирование: Практикум. - СПб.: Питер, 2006. - 265 с: ил.

Приложение

Листинг файла «k_2.h»

class triangle

{

public:

double side_a, side_b, side_c;

triangle ()

{

side_a=0.0; side_b=0.0; side_c=0.0;

}

triangle (double a, double b, double c)

{

side_a=a; side_b=b; side_c=c;

}

virtualvoid check (double &k)

{

if(((side_a+side_b)>side_c)&&((side_b+side_c)>side_a)&&((side_a+side_c)>side_b))

k=1;

else

k=0;

}

virtual void output (double &A, double &B, double &C, double &P, double &S)

{

double d1, d2;

double p=3.14159265;

d1=((side_b*side_b)+(side_c*side_c)-(side_a*side_a))/(2*side_b*side_c);

d2=((side_a*side_a)+(side_c*side_c)-(side_b*side_b))/(2*side_a*side_c);

A=acos(d1)*180.0/p;

B=acos(d2)*180.0/p;

C=180-A-B;

P=side_a+side_b+side_c;

S=pow((P*0.5*(P*0.5-side_a)*(P*0.5-side_b)*(P*0.5-side_c)),0.5);

}

};

class equilateral_triangle: public triangle

{

public:

equilateral_triangle():triangle(){}

equilateral_triangle(double a, double b, double c):triangle(a,b,c){}

void check(double &k)

{

if((side_a==side_b)&&(side_b==side_c)&&(side_a==side_c))

k=1;

else

k=0;

}

void output (double &A, double &P, double &S)

{

A=60;

P=3*side_a;

S=pow((P*0.5*pow((P*0.5-side_a),3)),0.5);

}

};

Источник: https://otherreferats.allbest.ru/download/1126370/