Создание массив объектов класса и проверить их
Задание : «Треугольник» Необходимо следить за непротиворечивостью состояния объекта (Проверять треугольник на существование). Данные класса: длины сторон треугольника. Функции класса: сравнение двух треугольников, вычисление площади и периметра треугольника, проверка, есть ли треугольник прямоугольным, равнобедренным, равносторонним. Создать массив объектов, вывести информацию обо всех равносторонних треугольников.
Не могу понять, как правильно создать массив объектов.
#include <iostream>
#include <string>
using namespace std;
class treygol
{
public:
double a;
double b;
double c;
double s;
void Print()
{
cout << "Вы ввели стороны треугольника=" << "\nПервая сторона-" << a <<
"\nВторая сторона -" << b << "\nТретья сторона-" << c << endl;
cout << endl;
}
void proverka()
{
if ((a + b > c) && (b + c > a) && (c + a > b))
{
cout << "Треугольник может существовать" << endl;
cout << endl;
}
else
{
cout << "Треуголник не существует" << endl;
cout << endl;
}
}
void square()
{
double p;
p = (a + b + c) / 2;
s = sqrt(p * (p - a) * (p - b) * (p - c));
cout << "Площадь треугольника=" << s << endl;
}
void perimetr()
{
double P;
P = a + b + c;
cout << "Периметр треугольника =" << P << endl;
}
void proverka2()
{
if ((a == b) || (a == c) || (b == c))
{
cout << "Треугольник равнобедреннфый" << endl;
}
else
{
cout << "Треугольник не является равнобедренным" << endl;
}
if (a * a == b * b + c * c)
{
cout << "Треугольник прямоугольный" << endl;
}
else
{
cout << "Треугольник не является прямоугольным" << endl;
}
if (a==b&&b==c)
{
cout << "Треугольник равносторонний" << endl;
}
else
{
cout << "Треугольник не является равностороним" << endl;
}
}
};
int main()
{
setlocale(LC_ALL, "Rus");
treygol treygolnic;
cout << "Введите первую сторону первого треугольника=" << endl;
cin >> treygolnic.a;
cout << "Введите вторую сторону первого треугольника=" << endl;
cin >> treygolnic.b;
cout << "Введите третью сторону первого треугольника=" << endl;
cin >> treygolnic.c;
treygolnic.proverka();
treygolnic.Print();
treygolnic.square();
treygolnic.perimetr();
treygolnic.proverka2();
treygol treygolnic2;
cout << "Введите первую сторону второго треугольника=" << endl;
cin >> treygolnic2.a;
cout << "Введите вторую сторону второго треугольника=" << endl;
cin >> treygolnic2.b;
cout << "Введите третью сторону второго треугольника=" << endl;
cin >> treygolnic2.c;
treygolnic2.proverka();
treygolnic2.Print();
treygolnic2.square();
treygolnic2.perimetr();
treygolnic2.proverka2();
if (treygolnic.s == treygolnic2.s)
{
cout << "Треугольники одинаковые";
}
}
Ответы (1 шт):
Можно определить оператор сравнения (operator==) для класса. Тогда можно сравнивать объекты этого класса с помощью обычного сравнения (==). Вот пример:
#include <iostream>
#include <string>
using namespace std;
class treygol
{
public:
double a;
double b;
double c;
void Print()
{
cout << "Вы ввели стороны треугольника=" << "\nПервая сторона-" << a << "\nВторая сторона -" << b
<< "\nТретья сторона-" << c << endl;
cout << endl;
}
void proverka()
{
if ((a + b > c) && (b + c > a) && (c + a > b))
{
cout << "Треугольник может существовать" << endl;
cout << endl;
}
else
{
cout << "Треуголник не существует" << endl;
cout << endl;
}
}
bool operator ==(const treygol &that) const
{
return a == that.a && b == that.b && c == that.c;
}
};
int main()
{
setlocale(LC_ALL, "Rus");
treygol treygolnic;
cout << "Введите первую сторону первого треугольника=" << endl;
cin >> treygolnic.a;
cout << "Введите вторую сторону первого треугольника=" << endl;
cin >> treygolnic.b;
cout << "Введите третью сторону первого треугольника=" << endl;
cin >> treygolnic.c;
treygolnic.proverka();
treygolnic.Print();
treygol treygolnic2;
cout << "Введите первую сторону второго треугольника=" << endl;
cin >> treygolnic2.a;
cout << "Введите вторую сторону второго треугольника=" << endl;
cin >> treygolnic2.b;
cout << "Введите третью сторону второго треугольника=" << endl;
cin >> treygolnic2.c;
treygolnic2.proverka();
treygolnic2.Print();
if(treygolnic2 == treygolnic)
cout << "Равны" << endl;
else
cout << "Не равны" << endl;
}
С точки зрения ООП было бы лучше сделать так (сделать члены класса private и инициализировать их в констркуторе):
#include <iostream>
#include <string>
using namespace std;
class treygol
{
double a;
double b;
double c;
public:
treygol( double init_a, double init_b, double init_c ) : a(init_a), b(init_b), c(init_c) {}
void Print()
{
cout << "Вы ввели стороны треугольника=" << "\nПервая сторона-" << a << "\nВторая сторона -" << b
<< "\nТретья сторона-" << c << endl;
cout << endl;
}
void proverka()
{
if ((a + b > c) && (b + c > a) && (c + a > b))
{
cout << "Треугольник может существовать" << endl;
cout << endl;
}
else
{
cout << "Треуголник не существует" << endl;
cout << endl;
}
}
bool operator ==(const treygol &that) const
{
return a == that.a && b == that.b && c == that.c;
}
};
int main()
{
setlocale(LC_ALL, "Rus");
double a;
double b;
double c;
cout << "Введите первую сторону первого треугольника=" << endl;
cin >> a;
cout << "Введите вторую сторону первого треугольника=" << endl;
cin >> b;
cout << "Введите третью сторону первого треугольника=" << endl;
cin >> c;
treygol treygolnic(a, b, c);
treygolnic.proverka();
treygolnic.Print();
cout << "Введите первую сторону второго треугольника=" << endl;
cin >> a;
cout << "Введите вторую сторону второго треугольника=" << endl;
cin >> b;
cout << "Введите третью сторону второго треугольника=" << endl;
cin >> c;
treygol treygolnic2(a, b, c);
treygolnic2.proverka();
treygolnic2.Print();
if(treygolnic2 == treygolnic)
cout << "Равны" << endl;
else
cout << "Не равны" << endl;
}