Пример: Точка от равнината
Нека дефинираме клас 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: Обработка на изключения | Записки по програмиране