Untitled
unknown
c_cpp
a month ago
6.6 kB
1
Indexable
Never
#include <iostream> #include <sstream> #include <windows.h> using namespace std; class Coord { private: int x, y; public: Coord( const int valX = 0, const int valY = 0 ) : x( valX ), y(valY) { } Coord( const Coord& copy ) : x( copy.x ), y( copy.y ) { } int GetX() const { return x; } int GetY() const { return y; } void SetX( const int x ) { this->x = x; } void SetY( const int y ) { this->y = y; } Coord& operator=( const Coord& copy ); Coord operator+( const Coord& other ); Coord operator+( const int val ); friend Coord operator-( Coord left, const Coord& right ); friend Coord operator-( Coord left, const int val); Coord& operator+=( const Coord& other ); Coord& operator+=( const int val ); friend Coord operator-=( Coord& left, const Coord& right ); friend Coord operator-=( Coord& left, const int val ); friend bool operator==( const Coord& left, const Coord& right ); friend bool operator!=( const Coord& left, const Coord& right ); }; Coord& Coord::operator=( const Coord& copy ) { x = copy.x; y = copy.y; return *this; } Coord Coord::operator+( const Coord& other ) { return Coord( x + other.x, y + other.y ); } Coord Coord::operator+( const int val ) { return Coord( x + val, y + val ); } Coord operator-( Coord left, const int val) { // c - 5 ---> operator-( c, 5 ) left.x -= val; left.y -= val; return left; } Coord operator-( Coord left, const Coord& right ) { left.x -= right.x; left.y -= right.y; return left; } ostream& operator<<(ostream& os, const Coord& my) { os << "(" << my.GetX() << "; " << my.GetY() << ")"; // friend my.value return os; } istream& operator>>(istream& is, Coord& my) { int x,y; is >> x >> y; my.SetX( x ); my.SetY( y ); return is; } Coord& Coord::operator+=( const Coord& other ) { x += other.x; y += other.y; return *this; } Coord& Coord::operator+=( const int val ) { x += val; y += val; return *this; } Coord operator-=( Coord& left, const Coord& right ) { left.x -= right.x; left.y -= right.y; return left; } Coord operator-=( Coord& left, const int val ) { left.x -= val; left.y -= val; return left; } bool operator==( const Coord& left, const Coord& right ) { return (left.x == right.x && left.y == right.y ); } bool operator!=( const Coord& left, const Coord& right ) { return !( left == right ); } int GetNumber( const string &mes, const int low, const int high ) { string nStr; long long n; while ( true ) { cout << mes << " от " << low << " до " << high << ": "; getline( cin, nStr ); // считываем строку неограниченной длины, до нажатия Enter int sign = 1; if ( nStr[0] == '-' ) { // проверяем наличие знака минус перед цифрами sign = -1; // если знак минус есть, то запоминаем знак числа // удалить знак минус перед числом nStr.erase( 0, 1 ); } // пробуем найти ЛЮБОЙ символ, НЕ входящий в набор 0123456789 if ( nStr.find_first_not_of( "0123456789" ) == string::npos ) { // если НЕ нашли, то введено целое число stringstream ss; ss << nStr; // отдаём строковому потоку строку, которая представляет собой запись целого полоительного числа ss >> n; // просим строковый поток вернуть нам int значение n *= sign; if ( n >= low && n <= high ) break; } cout << "Ошибка ввода! Значение должно быть " << "от " << low << " до " << high << "!" << endl; } return n; } int main() { SetConsoleCP( 1251 ); SetConsoleOutputCP( 1251 ); bool first = true; while ( true ) { int proc; if ( !first ) { cout << "Введите 1 для продолжения работы или 0 для выхода\n"; proc = GetNumber( "Введите число", 0, 1 ); if ( !proc ) return 0; } first = false; int ax = GetNumber( "Введите координату XA", -100000, 100000 ); int ay = GetNumber( "Введите координату YA", -100000, 100000 ); int bx = GetNumber( "Введите координату XB", -100000, 100000 ); int by = GetNumber( "Введите координату YB", -100000, 100000 ); Coord objA( ax, ay ), objB( bx, by ); cout << "Выберите пункт меню:\n"; cout << "1 - сумма координат\n"; cout << "2 - разность координат\n"; cout << "3 - сумма координаты A с числом\n"; cout << "4 - разность координаты B с числом\n"; cout << "5 - сравнение\n"; cout << "0 - выход\n"; int opt = GetNumber( "Введите число", 0, 5 ); switch( opt ) { case 1: { cout << "A + B = " << objA + objB << endl; break; } case 2: { cout << "A - B = " << objA - objB << endl; break; } case 3: { int n = GetNumber( "Введите число N", -100000, 100000 ); cout << "A + " << n << " = " << objA + n << endl; break; } case 4: { int n = GetNumber( "Введите число N", -100000, 100000 ); cout << "B - " << n << " = " << objB - n << endl; break; } case 5: { if ( objA == objB ) cout << "Координаты совпадают" << endl; else cout << "Координаты НЕ совпадают" << endl; break; } case 6: { Coord c = a; } } } return 0; }