Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <string.h>
- #include <math.h>
- using namespace std;
- class Point {
- public:
- //Объявление статического объекта
- static int pcount;
- // Конструктор
- Point(double _x = 0, double _y = 0) : x(_x), y(_y)
- {
- pcount++;
- cout << "Constr_Point " << pcount << endl;
- }
- //Деструктор
- ~Point()
- {
- cout << "Destr_Point " << pcount << endl;
- pcount--;
- }
- // Другие методы
- void Show() const;
- /*добавить операции-функции «+=», которая позволит нам впоследствии реализовать метод
- перемещения MoveO в классе Triangle:*/
- void operator +=(Point&);
- public:
- double x, y;
- };
- class Triangle {
- public:
- Triangle(Point, Point, Point, const char*);// конструктор
- Triangle(const char*);// конструктор пустого (нулевого) треугольника
- ~Triangle();// деструктор
- Point Get_vl() const { return v1; }// Получить значение vl
- Point Get_v2() const { return v2; }// Получить значение v2
- Point Get_v3() const { return v3; }// Получить значение v3
- char* GetName() const { return name; }// Получить имя объекта
- void Show() const;// Показать объект
- void ShowSideAndArea() const;// Показать стороны и площадь объекта
- void Move(Point);
- bool operator >(const Triangle&) const;
- public:
- static int count;// количество созданных объектов
- private:
- char* objID; // идентификатор объекта
- char* name; // наименование треугольника
- Point v1, v2, v3;// вершины
- double a; // сторона, соединяющая vl и v2
- double b; // сторона, соединяющая v2 и v3
- double c; // сторона, соединяющая vl и v3
- };
- int Point:: pcount = 0;
- void Point::Show() const
- {
- cout << " (" << x <<" , " << y << ")";
- }
- void Point::operator +=(Point& p)
- {
- x += p.x;
- y += p.y;
- }
- int Triangle::count = 0;// количество созданных объектов
- // Конструктор
- Triangle::Triangle(Point _v1, Point _v2, Point _v3, const char* ident)
- : v1(_v1), v2(_v2), v3(_v3)
- {
- char buf[16];
- objID = new char[strlen(ident) + 1];
- strcpy(objID, ident);
- count++;
- sprintf(buf, "triangle %d", count);
- name = new char[strlen(buf) + 1 ] ;
- strcpy(name, buf);
- a = sqrt((v1.x - v2.x) * (v1.x - v2.x) + (v1.y - v2.y) * (v1.y - v2.y));
- b = sqrt((v2.x - v3.x) * (v2.x - v3.x) + (v2.y - v3.y) * (v2.y - v3.y));
- c = sqrt((v1.x - v3.x) * (v1.x - v3.x) + (v1.y - v3.y) * (v1.y - v3.y));
- // отладочный вывод
- cout << "Constructor_l for: " << objID << " (" << name << ") " << endl;
- }
- // Конструктор пустого (нулевого) треугольника
- Triangle::Triangle(const char* ident)
- {
- char buf[16];
- objID = new char[strlen(ident) + 1];
- strcpy(objID, ident);
- count++;
- sprintf(buf, "triangle %d", count);
- name = new char[strlen(buf) + 1 ] ;
- strcpy(name, buf);
- a = b = c = 0;
- // отладочный вывод
- cout << "Constructor_2 for: " << objID << " (" << name << ") " << endl;
- }
- // Деструктор
- Triangle::~Triangle()
- {
- cout << "Destructor for: " << objID << endl;
- delete [] objID;
- delete [] name;
- }
- // Показать объект
- void Triangle::Show() const
- {
- cout << name << ":";
- v1.Show(); v2.Show(); v3.Show();
- cout << endl;
- }
- // Показать стороны и площадь объекта
- void Triangle::ShowSideAndArea() const
- {
- double p = (a + b + c)/2;
- double s = sqrt(p*(p-a)*(p-b)*(p-c));
- cout << "----------------------" << endl;
- cout << name << ":";
- cout.precision(4);
- cout << " a= " << a;
- cout << ", b= " << b;
- cout << ", c= " << c;
- cout << ";\ts= " << s << endl;
- }
- // Переместить объект на величину (dp.x. dp.у)
- void Triangle::Move(Point dp)
- {
- v1 += dp;
- v2 += dp;
- v3 += dp;
- }
- // Сравнить объект (по площади) с объектом t r ia
- bool Triangle::operator>(const Triangle& tria ) const
- {
- double p = (a + b + c) / 2;
- double s = sqrt(p * (p - a) * (p - b) * (p - c));
- double p1 = (tria.a + tria.b + tria.c ) / 2;
- double s1 = sqrt(p1 * (p1 - tria.a) * (p1 - tria.b) * (p1 - tria.c));
- if (s > s1)
- return true;
- ///else
- return false;
- }
- ///////////////////////////////////////////////////////////
- int main()
- {
- // Определения точек
- Point p1(0, 0); Point p2(0.5, 1);
- Point p3(1, 0);
- // Определения треугольников
- Triangle tr_A(p1, p2, p3, "tr1aA");
- {
- Point bb;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement