24.02.2011, 14:51. Просмотров 1584. Ответов 0
У меня есть задача: создать класс, описывающий объект
ТРАПЕЦИЯ. Свойства класса должны быть минимальны по количеству, но функционально полно описывать объект.
Перегрузить стандартные операторы, в том числе хотя бы один унарный. Перегрузить операторы потокового ввода/вывода. Разработать методы, позволяющие получить полные характеристики объекта.
Программа должна:
1. создать 2 экземпляра класса: первый конструктором с параметрами по умолчанию, второй конструктором с параметрами, запрашиваемыми у пользователя.
2. Продемонстрировать работу перегруженных операций и возможность удаления экземпляра класса.
Так вот у меня есть программа, только она для конуса:
Konys.h
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| #include <iostream>
#include <math.h>
#include <locale.h>
using namespace std;
class konys
{
private:
float *radius; // радиус
float *dlin_vis; // длинна бокоовой стороны
public:
konys(); // конструктор по умолчанию
konys(float rad, float dlin); // конструктор с заданными параметрами
konys(konys &k); //конструктор копирования
~konys(); // деструктор
float Get_radius(){return *radius;} // селектор
float Get_dlin_vis(){return *dlin_vis;} // селектор
void Set_radius(float r){*radius = r;} // модификатор
void Set_dlin_vis(float d){*dlin_vis = d;} // модификатор
// пергрузка оператора потокового вывода
friend ostream& operator << (ostream& out, konys& K){
return out << "Радиус равен = " << *(K.radius)<< ". Высота боковой стороны равна = " << *(K.dlin_vis) << endl;}
bool operator ==( konys other); // сравнение двух фигур
konys& operator +(); // увиличение в 2 раза
float operator -(); // объём
}; |
|
Konys.cpp
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| #include "konys.h"
konys::konys() // по умолчанию
{
radius = new float; // выделение динамической памяти под переменную
dlin_vis = new float;
*radius = 2; // присвоение значения
*dlin_vis = 4;
}
konys::konys(float rad, float dlin)
{
radius = new float;
dlin_vis = new float;
*radius = rad;
*dlin_vis = dlin;
}
konys::konys(konys &k)
{
radius = new float;
dlin_vis = new float;
*radius = *(k.radius); // копирование из другого экземпляра
*dlin_vis = *(k.dlin_vis);
}
konys::~konys() // деструктор
{
delete radius ; // очистка памяти
delete dlin_vis ;
}
bool konys::operator ==(konys other)
{
if (this->radius == other.radius && this->dlin_vis == other.dlin_vis) // если радиусы и высоты равны
return true; // возврат да
else // если нет
return false; // возврат нет
}
konys& konys::operator +()
{
*(this->radius) = *(this->radius)*2; // увиличивам радиус конуса в 2 раза
*(this->dlin_vis) = *(this->dlin_vis)*2; // увиличивам высоту конуса в 2 раза
return (*this);
}
float konys::operator -() // объём
{
float obiem = 0;
float dlin = *dlin_vis; // длинна высоты
float rad_2 = *(radius)/2; // пол радуса для нахожденя высоты
float rad = *radius;
float h = sqrt(dlin*dlin - rad*rad); // находим высот у
obiem = 3.14*0.33*(rad*rad)*h; // вычисляем объём
return obiem;
} |
|
Main.cpp
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| #include "konys.h"
void main()
{
setlocale( LC_ALL, "Russian" ); // вывод русских букв из консоли
float rad = 0, dlin = 0;
cout << "Создадим три экземпляра класа конус. 1 по умолчанию, 2 копирования, 3 вручную"<<endl;
cout << "Ввделите данные для 3го случая"<<endl;
cout << "Радиус: "; cin >> rad; // ввод данных
cout << "Высота: "; cin >> dlin; // ввод данных
konys *first = new konys(); // динически создаёмс класс с конструктором по умолчанию
konys *second = new konys(*first); // второй копия первого
konys *third = new konys(rad,dlin); // третий с параметрами
cout << "Посмотрим что получилось : " << endl;
cout << "1. ";
cout << *first; // работает перегруженный оператор вывода
cout << "2. ";
cout << *second; // работает перегруженный оператор вывода
cout << "3. ";
cout << *third; // работает перегруженный оператор вывода
cout << "Далее продемонстрируем работу селекторов для 3го экземпляра: " << endl;
cout << "Радиус = "<< third->Get_radius() << " Высота = " << third->Get_dlin_vis() << endl;
// здесь работаю селекторы
cout << "Далее продемонстрируем работу модификаторов для 3го экземпляра:: " << endl;
cout << "Введите новый радиус: "; cin >> rad;
third->Set_radius(rad); // модификатор радиуса
cout << *third;
cout << "Далее демонстрируем работу перегруженных операторов: " << endl;
cout << "Увеличиваем в 2 раза "<<endl;
third->operator +(); // вызов перегруженного + для увиличеняи в 2 раза
cout << *third;
cout << "Сравним 1 и 3 коусы " << endl;
bool f = (first == third); // перегруженный == сравниваем первый с третим
cout << *first;
cout << *third;
if (f == true) // условие выводв если равны/неравны
cout << "Обьекты равны" << endl;
else
cout << "Обьекты не равны" << endl;
float ob = third->operator -(); // вычисляем объём
cout << "Объём равен = " << ob << endl;
cout << "Далее продемострируем работу деструкторов для 1 и 3, 2 не будем трогать "<< endl;
first->~konys(); // деструктор
third->~konys(); // деструктор
cout << "После деструкторов : " << endl;
cout << *first; // проверка работы деструктора
cout << *second;
cout << *third;
} |
|
Помогите пожалуйса, как сделать тоже самое, но для трапеции!!!