Пример: Точка от равнината
Нека дефинираме клас Point, който моделира точка в равнината така, както е описано в раздел Примери:Точка в равнината.
Класът Point ще има две член-променливи x_ и y_ от типа double, които са декартовите координати на точката в равнината. Член-променливите са дефинирани в скритата част на класа. За да имаме достъп до стойностите на тези променливи дефинираме две двойки методи:
get_x()иget_y(), които връщат текущите стойности на x и y-координатата на точката съответно;set_x()иset_y(), които задават нови стойности на координатите на точката.
#include<iostream>
using namespace std;
class Point {
double x_, y_;
public:
double get_x() {return x_;}
double get_y() {return y_;}
void set_x(double x) {x_=x;}
void set_y(double y) {y_=y;}
Point(double x=0.0, double y=0.0) {
x_=x;
y_=y;
}
...
};
Дефинираме и конструктор за класа Point, който приема два аргумента – декартовите координати на създаваната точка. Обърнете внимание, че и двата аргумента на конструктора имат стойности по подразбиране. Това позволява конструкторът да се вика без да му се предават аргументи, т.е. този конструктор може да работи и като конструктор по подразбиране.
Като член-функции на класа реализираме и операциите събиране и изваждане на точки от равнината. Член-функцията add получава като аргумент точка от равнината и я добавя към обекта, чрез който е извикана.
void add(Point other) {
x_+=other.x_;
y_+=other.y_;
}
Аналогично работи функцията sub, която намира разликата между две точки.
void sub(Point other) {
x_-=other.x_;
y_-=other.y_;
}
Като пример за използването на обекти от класа Point нека разгледаме функцията add:
Point add(Point p1, Point p2) {
Point result(p1.get_x(),p1.get_y());
result.add(p2);
return result;
}
Тази функция приема като аргументи две променливи от типа Point, изчислява тяхната сума и връща резултата. В ред 2 се създава временна променлива result от типа Point, която се инициализира така, че нейните координати да са равни на координатите на първия аргумент p1. След това, в ред 3, към точката result се добавя точката p2. Следователно променливата result съдържа резултата от събирането на двете точки, предадени като аргументи на функцията – p1 и p2.
Целият код на примерната програма е представен в следващия фрагмент:
#include <iostream>
using namespace std;
class Point {
double x_, y_;
public:
double get_x() {return x_;}
double get_y() {return y_;}
void set_x(double x) {x_=x;}
void set_y(double y) {y_=y;}
Point(double x=0.0, double y=0.0) {
x_=x;
y_=y;
}
void add(Point other) {
x_+=other.x_;
y_+=other.y_;
}
void sub(Point other) {
x_-=other.x_;
y_-=other.y_;
}
double distance(Point other) {
double dx=x_-other.x_;
double dy=y_-other.y_;
return sqrt(dx*dx+dy*dy);
}
};
Point add(Point p1, Point p2) {
Point result(p1.get_x(),p1.get_y());
result.add(p2);
return result;
}
Point sub(Point p1, Point p2) {
Point result(p1.get_x(), p2.get_y());
result.sub(p2);
return result;
}
double distance(Point p1, Point p2) {
return p1.distance(p2);
}

Pingback: CPP-101: Кратък обзор на езика за програмиране C++ | Записки по програмиране
Pingback: CPP-101: Обработка на изключения | Записки по програмиране