Пример 2: Класс, описывающий точку

#include <iostream>

#include <conio.h>

#include <windows.h>

#define _USE_MATH_DEFINES

#include <math.h>

using namespace std;

class CPoint

{

double x, y; //Закрытые элементы данных

public:

// Функции, обеспечивающие доступ:

double GetX(){return x;}

double GetY(){return y;}

void SetX(double _x){x = _x;}

void SetY(double _y){y = _y;}

// Функции ввода-вывода:

void Input();

void Output();

/* Функция, вычисляющая длину отрезка между двумя точками:

первой точкой будет та, к которой применяется эта функция, а второй – та, которая передается как параметр функции (точка p). Обратите внимание, как происходит обращение к координатам той и другой точки. */

double Len(CPoint p)

{

return sqrt(pow(x-p.x, 2)+pow(y-p.y, 2));

};

}; // Описание класса закончено

/* Объявление функции, вычисляющей периметр треугольника:
координаты вершин будут храниться в массиве, указатель на который передается как параметр функции. */

double Perimeter(CPoint*);

// Пример главной программы:

int main()

{

//Настройки шрифтов и региональных стандартов:

if(SetConsoleCP(1251)==0)

//проверка правильности установки кодировки символов для ввода

{

cerr<<"Fialed to set codepage!"<<endl;

/* если не удалось установить кодовую страницу, вывод сообщения об ошибке */

}

if(SetConsoleOutputCP(1251)==0)//тоже самое для вывода

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

CPoint p[3]; // массив точек

// Считываем координаты вершин треугольника:

for (int i=0; i<3; i++)

{

p[i].Input();

}

cout << "Периметр треугольника = " << Perimeter(p) << endl;

//Сдвигаем первую точку на 1 по X и на 2 по Y:

p[0].SetX(p[0].GetX()+1);

p[0].SetY(p[0].GetY()+2);

cout << "Периметр нового треугольника = " << Perimeter(p) << endl;

_getch();

return 0;

}

// Определение функций:

// Определение функции, вычисляющей периметр треугольника:

double Perimeter(CPoint* p)

// Эта функция не является членом класса

{

int len = 0;

// Складываем длины сторон треугольника:

for (int i = 0; i < 3; i++)

{

/* Обратите внимание на то, как обеспечивается то, что номер точки должен быть от 0 до 2: */

len+=p[i].Len(p[(i+1) % 3]);

}

return len;

}

// Функция для ввода данных:

void CPoint::Input()

{

static int i=1; /* Статическая переменная, которая позволит нам нумеровать считываемые точки */

cout<<"Задайте координаты "<< i++ << " точки ";

cin >> x >> y;

}

// Функция для вывода данных:

void CPoint::Output()

{

static int i=1;

cout << "Координаты " << i << " точки: " <<

x << y << endl;

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: