Подробности - CPoint

Этот класс является необходимым для многих классов. Используется очень часто.

Он является оболочкой для структуры Windows - POINT.

typedef struct tagPOINT 
{
	LONG x;	// координата Х
	LONG y;	// координата Y
} POINT;

У этого класса нет папы - он сирота.

Для работы необходимо создать класс и объект класса. Все примеры Win32 Console!

Пример 1

Создает класс с неинициализированными Х и Y

CPoint MyPoint();		// и класс и объект
CPoint *MyPoint();		// только класс
MyPoint=new CPoint();	// а это только объект на

Пример 2

Создает обьект со значениями

CPoint MyPoint(1,2);	// догадались теперь х=1 а y=2

Пример 3

Конструктор копий создает точнуб копию исходного CPoint, брата близнеца:

CPoint InPoint(1,2);
CPoint OutPoint(InPoint);

Пример 4

Из объекта CSize, это естественно, так как в объекте CSize тоже всего x и y.

#include <iostream.h>
#include <afxwin.h>
void main()
{
	CPoint InPoint(CSize(10,10));
	cout << InPoint.x << "   " << InPoint.y << endl;
}

результат 10 и 10, а вы что подумали ?

Пример 5

Из двойного слова. Удобно писать на диск и востанавливать.

При записи на диск записываются только данные, а при чтении обьект восстанавливается.

#include <iostream.h>
#include <afxwin.h>
void main()
{
	DWORD d;
	d=10;
	CPoint InPoint(d);
	cout << InPoint.x << "   " << InPoint.y << endl;
}

Ну , что будет ? 10 и 0.

Пример 6

Смещает точку с использованием разных классов, а точнее изменяет х и y. Именно смещает, прибавляя значения к х и y:

#include <iostream.h>
#include <afxwin.h>
void main()
{
	CPoint MyPoint(10,10);
	CPoint OfPoint(3,3);
	CSize OfSize(4,-4);
	MyPoint.Offset(-5,-5);	// непосредственным значением
	cout << MyPoint.x << "   " << MyPoint.y << endl;
	MyPoint.Offset(OfPoint);	// другой точкой
	cout << MyPoint.x << "   " << MyPoint.y << endl;
	MyPoint.Offset(OfSize);	// классов CSize
	cout << MyPoint.x << "   " << MyPoint.y << endl;
}

Пример 7

Точки можно сравнивать

#include <iostream.h>
#include <afxwin.h>

void main()
{
	CPoint C1Point(10,10);
	CPoint C2Point(3,3);
	CPoint C3Point(10,10);
	cout << "C1== C2   ";
	if (C1Point==C2Point)
		cout << " равны ";
	else
		cout << " не раны " << endl;
	cout << "C1==C3    ";
	if (C1Point==C3Point)
		cout << " равны ";
	else
		cout << " не равны " << endl;
}

Пример 8

Сравнивать можно и так:

#include 
#include 
void main()
{
	CPoint C1Point(10,10);
	CPoint C2Point(3,3);
	CPoint C3Point(10,10);
	if (!(C1Point!=C3Point))
		cout << "  равны ";
	else
		cout << " не равны " << endl;
}

Пример 9

Можно складывать точки вот так:

#include <iostream.h>
#include <afxwin.h>
void main()
{
	CPoint C1Point(10,10);
	CPoint C2Point(3,3);
	C1Point+=C2Point;
	cout << C1Point.x << "   " << C1Point.y << endl;
}

Пример 10

И так тоже можно:

#include <iostream.h>
#include <afxwin.h>
void main()
{
	CPoint C1Point(10,10);
	CSize C2Point(3,3);
	C1Point+=C2Point;
	cout << C1Point.x << "   " << C1Point.y << endl;
}

Пример 11

Так тоже можно:

#include <iostream.h>
#include <afxwin.h>
void main()
{
	CPoint C1Point(10,10);
	CSize C2Point(3,3);
	C1Point=C1Point+C2Point;
	cout << C1Point.x << "   " << C1Point.y << endl;
}

Пример 12

#include <iostream.h>
#include <afxwin.h>
void main()
{
	CPoint C1Point(10,10);
	CPoint C2Point(3,3);
	C1Point=C1Point+C2Point;
	cout << C1Point.x << "   " << C1Point.y << endl;
}

Пример 13

Вычитать так:

#include <iostream.h>
#include <afxwin.h>
void main()
{
	CPoint C1Point(10,10);
	CPoint C2Point(3,3);
	C1Point-=C2Point;
	cout << C1Point.x << "   " << C1Point.y << endl;
}

Пример 14

И так !

#include <iostream.h>
#include <afxwin.h>
void main()
{
	CPoint C1Point(10,10);
	CSize C2Point(3,3);
	C1Point-=C2Point;
	cout << C1Point.x << "   " << C1Point.y << endl;
}

Пример 15

Вычитать так:

#include <iostream.h>
#include <afxwin.h>
void main()
{
	CPoint C1Point(10,10);
	CPoint C2Point(3,3);
	C1Point=C1Point-C2Point;
	cout << C1Point.x << "   " << C1Point.y << endl;
}

Пример 16

И так !

#include <iostream.h>
#include <afxwin.h>
void main()
{
	CPoint C1Point(10,10);
	CSize C2Point(3,3);
	C1Point=C1Point-C2Point;
	cout << C1Point.x << "   " << C1Point.y << endl;
}

Пример 17

Запись и чтение CPoint в файл.

#include <fstream.h>	// файловый поток
#include <iostream.h>	// стандартный поток
#include <afxwin.h>	// без коментариев
void main()
{
	// переменные
	DWORD *dwTest;
	WORD wTest[2];
	CPoint CTestPoint(1234,1119);		// Создали класс точки
	//Запись
 	wTest[0]=(WORD)CTestPoint.x;		//
	wTest[1]=(WORD)CTestPoint.y;		//Перенесли в WORD + WORD =DWORD !
	ofstream ofs("test.dat",ios::binary);	// открыли на запись
	ofs.write((char*)&wTest,sizeof(wTest));	// записали
	ofs.close();				// закрыли
	// Чтение
	ifstream ifs("test.dat",ios::binary);	// открыли на чтение
	ifs.read((char*)&wTest,sizeof(wTest));	// прочитали
	ifs.close();				// закрыли
	dwTest=(DWORD*)&wTest;			// Адреса равны !
	// проверка
	CPoint TestPoint(*dwTest);			// Востановить класс
	cout << TestPoint.x << "   " << TestPoint.y << endl;	//Вывести на экран
} 

Ну вот. Это мои варианты. Потратил 4 чашки кофе.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 02.09.99