в 2017 вижуале все работало,а в 2012 все сломалось(((
#include <iostream>
using namespace std;
class Rectangle
{
public:
Rectangle() : Left(0), Up(0), Right(0), Down(0) {};
Rectangle(const Rectangle& RECTANGLE) : Left(RECTANGLE.Left), Up(RECTANGLE.Up), Right(RECTANGLE.Right), Down(RECTANGLE.Down) {};
~Rectangle() {};
double Area();
double Perimeter();
void Revise();
friend istream& operator>>(istream& IN, Rectangle& RECTANGLE);
friend ostream& operator<<(ostream& OUT, const Rectangle& RECTANGLE);
Rectangle& operator=(const Rectangle& RECTANGLE);
Rectangle operator+(const Rectangle& RECTANGLE);
Rectangle operator*(const Rectangle& RECTANGLE);
private:
double Left, Up, Right, Down;
};
double Rectangle::Area()
{
return abs(Right - Left) * abs(Up - Down);
};
double Rectangle::Perimeter()
{
return 2 * (abs(Right - Left) + abs(Down - Up));
};
void Rectangle::Revise()
{
double TEMP;
if (Left > Right)
{
TEMP = Left;
Left = Right;
Right = TEMP;
};
if (Up < Down)
{
TEMP = Up;
Up = Down;
Down = TEMP;
};
};
Rectangle& Rectangle::operator=(const Rectangle& RECTANGLE)
{
if (this == &RECTANGLE) return *this;
Left = RECTANGLE.Left;
Up = RECTANGLE.Up;
Right = RECTANGLE.Right;
Down = RECTANGLE.Down;
};
Rectangle Rectangle::operator+(const Rectangle& RECTANGLE)
{
Rectangle TEMP;
Left <= RECTANGLE.Left ? TEMP.Left = Left : TEMP.Left = RECTANGLE.Left;
Up >= RECTANGLE.Up ? TEMP.Up = Up : TEMP.Up = RECTANGLE.Up;
Right >= RECTANGLE.Right ? TEMP.Right = Right : TEMP.Right = RECTANGLE.Right;
Down <= RECTANGLE.Down ? TEMP.Down = Down : TEMP.Down = RECTANGLE.Down;
return TEMP;
};
Rectangle Rectangle::operator*(const Rectangle& RECTANGLE)
{
Rectangle TEMP;
Left >= RECTANGLE.Left ? TEMP.Left = Left : TEMP.Left = RECTANGLE.Left;
Up <= RECTANGLE.Up ? TEMP.Up = Up : TEMP.Up = RECTANGLE.Up;
Right <= RECTANGLE.Right ? TEMP.Right = Right : TEMP.Right = RECTANGLE.Right;
Down >= RECTANGLE.Down ? TEMP.Down = Down : TEMP.Down = RECTANGLE.Down;
if ((TEMP.Left > TEMP.Right) || (TEMP.Up < TEMP.Down)) TEMP.Left = TEMP.Up = TEMP.Right = TEMP.Down = NAN;
return TEMP;
};
istream& operator>>(istream& IN, Rectangle& RECTANGLE)
{
IN >> RECTANGLE.Left >> RECTANGLE.Up >> RECTANGLE.Right >> RECTANGLE.Down;
RECTANGLE.Revise();
return IN;
};
ostream& operator<<(ostream& OUT, const Rectangle& RECTANGLE)
{
OUT << RECTANGLE.Left << " < x < " << RECTANGLE.Right << ", " << RECTANGLE.Down << " < y < " << RECTANGLE.Up;
return OUT;
};
void main()
{
setlocale(LC_ALL, "Russian");
Rectangle A, B;
cout << "Введите координаты точек, задающих прямоугольник A: ";
cin >> A;
cout << "\nA: " << A << "\nПлощадь A = " << A.Area() << "\nПериметр A = " << A.Perimeter();
cout << "\n\nВведите координаты точек, задающих прямоугольник B: ";
cin >> B;
cout << "\nB: " << B << "\nПлощадь B = " << B.Area() << "\nПериметр B = " << B.Perimeter();
cout << "\n\nA * B = " << A * B;
cout << "\nA + B = " << A + B << endl;
system("pause");
}