понедельник, 14 октября 2013 г.

Задание 3. Классы в C++. Инкапсуляция. Наследование. Полиморфизм.



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

2)      Напишите программу, реализующую Вашу задачу. При этом:


a)      Спроектируйте класс:

  • Опишите нужные поля (члены-данные класса);
  • Напишите конструктор;
  • Напишите метод (методы), выводящий на экран значения полей (членов-данных класса);
  • Напишите методы (члены-функции) класса, нужные для реализации задачи;
  • Напишите дружественную функцию, описанную в задаче.

b)      Описание класса сделайте в заголовочном файле, описание методов и функцию main- в двух других файлах.

c)      После вызова конструктора обязательно вызовите метод, печатающий значения полей (для проверки)

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

Указания

Например, рассмотрим, как написать программу, реализующую задачу:
Описать класс Четырехугольник (определен координатами вершин).
Методы рассчитывают длины сторон, периметр. Друг класса определяет, периметр какого из двух четырехугольников меньше.
Используя созданный класс, написать программу, в которой рассчитываются характеристики двух  четырехугольников и делается заключение, какой из них имеет меньший периметр.

Действуем в соответствии с заданием:
Спроектируем класс:

1-й этап: Опишем нужные поля (в заголовочном файле Pr_Klass.h)
#include <iostream>
using namespace std;
class FourAngl
{
double x1,y1,x2,y2,x3,y3,x4,y4,P;
/*Опишем там же конструктор, функцию-член вычисления периметра и функцию-член для вывода на экран координат:
*/
public:
FourAngl(void);
double Perimetr(void);
void Show(void);
};

2-й этап: Напишем код членов-функций в файле metody.cpp

#include "Pr_Klass.h"
FourAngl::FourAngl(void){x1=0;y1=0; x2=0;y2=4;x3=3;y3=4; x4=3;y4=0;}
double FourAngl::Perimetr(void){P=0;return P;}
void FourAngl::Show(void)
{
cout<<"vershiny: "<<x1<<" "<<y1<<endl<<"          "<<x2<<" "<<y2<<endl;
cout<<"          "<<x3<<" "<<y3<<endl<<"          "<<x4<<" "<<y4<<endl;
}

При этом

  • Конструктор сделаем предельно простой и удобный, чтобы при каждом запуске программы не вводить координаты.
  • Функция-член Perimetr ничего не делает (заглушка);
  • Функция-член Show выводит на экран координаты.
3-й этап: Напишем предварительную функцию main в файле pr_main.cpp

#include "Pr_Klass.h"
void main()
{
FourAngl fig1;
fig1.Show();

}
Она позволит отладить написанный вариант.
Запустим этот вариант программы. Если ошибок нет, на экране появятся координаты вершин.

4-й этап: Напишем вычисление периметра и выведем его значение на экран

Модифицируем член-функцию (хорошо бы ввести члены-данные "длины сторон" и член-функцию, которая их вычисляет, но это сделают те, у кого соответствующие задачи):

double FourAngl::Perimetr(void)
{
P=sqrt(x1*x1+y1*y1)+sqrt(x2*x2+y2*y2)+sqrt(x3*x3+y3*y3)+sqrt(x4*x4+y4*y4);
return P;
}

В функцию  main вставим еще один оператор:
cout<<"P="<<fig1.Perimetr();
а в хедер-файле присоединим библиотеку математических функций.
Запустим этот вариант программы и убедимся, что всё рассчитывается верно.
Если в Вашей задаче есть еще методы, вписывайте и отлаживайте их один за другим.

5-й этап: Перепишем конструктор

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

FourAngl::FourAngl(void)
{cout<<"x1,y1=";cin>>x1>>y1;
 cout<<"x2,y2=";cin>>x2>>y2;
 cout<<"x3,y3=";cin>>x3>>y3;
 cout<<"x4,y4=";cin>>x4>>y4;
}

А можно воспользоваться параметрами (здесь по-разному могут задаваться только координаты (x1,y1):

FourAngl::FourAngl(double a1,double b1)
{
x1=a1; y1=b1;
x2=4; y2=5;
x3=3; y3=7;
x4=1; y4=2;
}

В зависимости от кода конструктора,  начальные значения координат в функции  main будут задаваться по-разному:

void main()
{
FourAngl fig1, fig2(10,11);
fig1.Show();
fig2.Show();
cout<<"P="<<fig1.Perimetr()<<endl;
cout<<"P="<<fig2.Perimetr()<<endl;
}

Использование функции-друга будет описано в следующем сообщении.

Комментариев нет:

Отправить комментарий