Ключевое слово this
При вызове функции – члена класса передается еще один неявный параметр – указатель на объект класса, который вызывает данную функцию. Этот указатель называется this.
Ключевое слово this используется, в частности, при перегрузке операций.
Как известно, функции-члены класса могут иметь доступ к private-членам их класса. Например,
class cl
{
int i;
…
}
Для данного класса функция – член класса может иметь оператор присваивания i=10. В действительности этот оператор является короткой записью оператора
this ->i=10;
Чтобы понять, как указатель this работает, рассмотрим следующую короткую программу:
// Ex17. Использование указателя this
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
class cl
{
int i;
public:
void load_i (int val)
{
this->i = val;
}
int get_i (void)
{
return this->i;
}
};
void main (void)
{
cl c;
c.load_i(100);
cout << c.get_i();
getch();
}
Перегрузка операций
За небольшим исключением большинству операций языка C++ может придано специальное значение относительно вновь определенных классов. Для встроенных типов данных значение операции изменить нельзя. Например, класс, который определяет список указателей, может использовать операцию + для добавления объекта в список. Когда операция перегружена, ни одно из ее исходных значений не теряется. Просто вводится новая операция относительно нового конкретного класса.
Чтобы перегрузить операцию, надо определить, что эта операция значит относительно класса, к которому она будет применяться. Для этого задается специальная функция операции (operator function), которая определяет действие этой операции.
Основная форма записи функции-операции, являющейся функцией – членом класса:
Тип_возвр_знач имя_класса::operator # (список аргументов)
{
// операторы, определяющие действие
}
# – конкретный знак операции, Часто возвращаемое значение имеет тот же тип, что и класс, хотя возможен и другой тип этого значения. Функция операции должна быть или членом класса или дружественной функцией. Небольшие отличия в случае члена класса или дружественной функции имеются.
Рассмотрим на примере, как реализуется перегрузка операций. Рассмотрим программу, которая перегружает операции + и = относительно класса vectог. Класс vector определяет трехмерный вектор в евклидовом пространстве. Операция сложения двух векторов выполняется как сложение соответствующих координат:
// Ex 18. Перегрузка операций + и =
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
class vector
{
int x, y, z;
public:
vector operator+ (vector t);
vector operator= (vector t);
void show(void);
void assign (int mx, int my, int mz);
};
vector vector::operator+ (vector t)
{
vector temp;
temp.x = x + t.x;
temp.y = y + t.y;
temp.