smoky__mo
@smoky__mo
Студент прохладной жизни

С++ Классы, нужно сравнить два объекта одного класса и вывести результат на экран, как это сделать?

метод, сравнивающий две окружности по длине или по площади круга по выбору пользователя (в качестве параметра принимается объект класса "Окружность").

Мой код:
#include "stdafx.h"
#include <iostream>
using namespace std;

class Circles // имя класса
{
private: // спецификатор доступа private
	int circuit; // координаты
	int X, Y; // установка координат
	float rad; // радиус
	float leng; // длина
	float place; // площадь
	
public: // спецификатор доступа public
	float plosh, lnght;
	float pi = 3.14;
	int x,y;
	int radx, rady;

	void message() // функция (метод класса) выводящая сообщение на экран
	{
		cout << "\n Инициализация данных... \n";
	}
	void set_circuit (int coordX, int coordY) // установка координат по Х и по У
	{
		X = coordX; // инициализация X
		Y = coordY; // инициализация Y
	}
	void get_circuit() // отобразить текущую дату
	{
		cout << "х: " << X << "   у:" << Y << "\n" << endl;
	}
	void set_rad(float circ_rad) {
		rad = circ_rad; // установка радиуса
	}
	void get_rad() {
		cout << "Радиус : "<< rad << "\n" << endl;
	}
	void get_leng() {
		 lnght = leng;
	}
	void get_place() {
		 plosh = place;
	}
	void calc_leng() {
		lnght = rad * 2 * pi;
		cout << "Длина окружности: " << lnght << "\n"<< endl;
	}
	void calc_place() {
		plosh = rad*pi*rad;
		cout << "Площадь окружности: " << plosh << "\n" << endl;
	}
	Circles():leng(lnght){}
	int getLeng() {
		return leng;
	}
}; // конец объявления класса CppStudio

int main(int argc, char* argv[])
{
	setlocale(LC_ALL, "rus"); // установка локали
	float X, Y, X2, Y2;
	int rad1, rad2;
	
	cout << "Введите координаты первой окружности \n";
	cout << "По Х: ";     cin >> X;
	cout << "По У: ";    cin >> Y;
	cout << "\nВведите радиус первой окружности: "; cin >> rad1;
	
	cout << "\nВведите координаты второй окружности \n";
	cout << "По Х: "; cin >> X2;
	cout << "По У: "; cin >> Y2;
	cout << "Введите радиус второй окружности: "; cin >> rad2;
	Circles circOne; // объявление объекта
	circOne.message(); // вызов функции класса message
	cout << "Координаты первой окружности:\n ";
	circOne.set_circuit (X, Y); // инициализация координат
	circOne.get_circuit(); // отобразить координаты
	circOne.set_rad(rad1);
	circOne.get_rad();
	
	cout << "Координаты второй окружности:\n ";
	Circles circTwo;
	circTwo.set_circuit(X2, Y2);
	circTwo.get_circuit();
	circTwo.set_rad(rad2);
	circTwo.get_rad();
	system("pause");
	return 0;
}

дело за малым - сравнение
  • Вопрос задан
  • 2346 просмотров
Решения вопроса 1
arusef
@arusef
Novice .NET dev
Эх. Вообще, знать длину окружности или площадь для сравнения не нужно. Достаточно знать, что у окружностей радиусы одинаковые.
А посему, есть пара советов (и пускай это пока не будет true C++)
1. Делать методы get_XXXX типа void - очень странный подход. Мало того, что класс такой специфики едва ли должен знать о логике вывода в консоль, так ещё и это нарушает в принципе семантику get. Поэтому из таких методов лучше возвращать просто значение соответствующего поля.
2. Чтобы добавить какую-то логику сравнения, можете добавить такой или аналогичный метод:
public: bool equals_to(const Circles& right){
    return rad == right.rad; // обычно сравнивать float так не очень хорошо, но пусть будет
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@tomatho
Как? Решительно, стремительно!
Если этот код писали вы - то не составит труда.
Если это задание в курсе лекций - то я не намерен помогать изображать фальшивое понимание.
Ответ написан
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Определи оператор сравнения en.cppreference.com/w/cpp/language/operators и сравнивай, а читать твою простыню не оформленного кода мало у кого есть желание.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы