#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
class CSize
{
friend class CRect;
/* Объявляем класс CRect дружественным для того, чтобы он имел доступ к элементам данных класса CSize */
int cx, cy; // размер по горизонтали и размер по вертикали
public:
CSize(int x = 0, int y=0): cx(x), cy(y){};
// в данной программе требуется только конструктор класса CSize
};
// Класс, описывающий прямоугольники:
class CRect
{
int left, top, right, bottom;
// координаты верхнего левого и нижнего правого углов прямоугольников
public:
// Конструктор:
CRect (int l=0, int t=0, int r=0, int b = 0)
{ left = l; top = t; right = r; bottom = b;}
// Ширина и высота прямоугольника:
int Width() { return right - left;}
int Height(){ return bottom - top;}
// функция, которая выводит координаты левого верхнего и правого нижнего
// углов прямоугольника:
void Draw()
{
cout << "(" << left << ";" << top << ") (" << right << ";" << bottom << ")" << endl;
}
// операция +=, которая выполняет сдвиг прямоугольника на заданные расстоя// ния:
CRect& operator += (CSize& size)
{
left += size.cx;
right += size.cx;
top += size.cy;
bottom += size.cy;
|
|
return *this; //функция возвращает текущий объект
}
// операция +, которая выполняет сдвиг прямоугольника на заданные расстояния:
CRect operator + (CSize& size)
{
CRect tmp = *this;
tmp += size;
return tmp; // функция возвращает временный объект
}
};
//===================================================
int main()
{
//Настройки шрифтов и региональных стандартов:
if(SetConsoleCP(1251)==0)
//проверка правильности установки кодировки символов для ввода
{
cerr<<"Fialed to set codepage!"<<endl;
/* если не удалось установить кодовую страницу, вывод сообщения об ошибке */
}
if(SetConsoleOutputCP(1251)==0)//тоже самое для вывода
{
cerr<<"Failed to set OUTPUT page!"<<endl;
}
CRect rect0(10,10, 50,30); // Объявляем прямоугольник
CRect rect = rect0;
// копия прямоугольника (соответствующую операцию сгенерирует компилятор)
// выводим информацию о прямоугольниках:
for (int i=0; i<=11; i++) // счетчик i отсчитывает ряды прямоугольников
{
for (int j=1; j<=14; j++)
// в каждом ряду расположено по 14 прямоугольников
{
rect.Draw(); // “рисуем” прямоугольник
rect += CSize(rect.Width()+2, 0);
// сдвигаем прямоугольник вправо, используя операцию +=
}
rect = rect0 + CSize(0, (rect.Height()+5)*i);
// сдвигаем прямоугольник вниз с помощью операции +
}
_getch();
return 0;
}