При каждом вызове функции-члена ей автоматически передается указатель, именуемый ключевым словом
Как вы знаете, функция-член может иметь прямой доступ к закрытым (private) членам данных своего класса.
Например, у нас определен такой класс.
class cl {
int i;
void f() { ... };
// . . .
};
В функции
i = 10;
В действительности предыдущая инструкция представляет собой сокращенную форму следующей.
this->i = 10;
Чтобы понять, как работает указатель
#include
using namespace std;
class cl {
int i;
public:
void load_i(int val) { this->i = val; } // то же самое, что i = val
int get_i() { return this->i; } // то же самое, что return i
};
int main()
{
cl o;
o.load_i (100);
cout << о.get_i();
return 0;
}
При выполнений эта программа отображает число
Безусловно, предыдущий пример тривиален, но в нем показано, как можно использовать указатель
Важно!
Глава 13: Перегрузка операторов
В C++ операторы можно перегружать для "классовых" типов, определяемых программистом. Принципиальный выигрыш от перегрузки операторов состоит в том, что она позволяет органично интегрировать новые типы данных в среду программирования.
Перегружая оператор, можно определить его значение для конкретного класса. Например, класс, который определяет связный список, может использовать оператор
Перегрузка операторов тесно связана с перегрузкой функций. Чтобы перегрузить оператор, необходимо определить значение новой операции для класса, к которому она будет применяться. Для этого создается функция
тип имя_класса::operator#(список_аргументов)
{
операция_над_классом
}
Здесь перегружаемый оператор обозначается символом
Операторная функция может быть членом класса или не быть им. Операторные функции, не являющиеся членами класса, часто определяются как его "друзья". Операторные функции-члены и функции-не члены класса различаются по форме перегрузке. Каждый из вариантов мы рассмотрим в отдельности.
Начнем с простого примера. В следующей программе создается класс
// Перегрузка операторов с помощью функций-членов.
#include
using namespace std;
class three_d {
int x, y, z; // 3-мерные координаты
public:
three_d() { x = у = z = 0; }
three_d(int i, int j, int k) {x = i; у = j; z = k; }