C++ Перегрузка оператора доступа к членам класса ->
Перегрузка операторов и перегрузка функций в C++
Оператор доступа к членам класса (->) можно перегрузить, но это довольно хлопотно. Он определён для придания классу поведения "указателя". Оператор -> должен быть функцией-членом. Если используется оператор ->, возвращаемый тип должен быть указателем или объектом класса.
Оператор -> обычно используется в сочетании с оператором разыменования указателя * для реализации функциональности «умных указателей». Эти указатели являются объектами, которые ведут себя как обычные указатели, за исключением того, что при доступе к объекту через указатель они выполняют другие задачи. Например, когда указатель уничтожается или когда указатель указывает на другой объект, объект автоматически удаляется.
Оператор разыменования -> можно определить как унарный постфиксный оператор. То есть, для класса:
class Ptr{
//...
X * operator->();
};
ClassPtrОбъекты могут использоваться для доступа к классам.XЕго члены используются способом, очень похожим на указатели. Например:
void f(Ptr p )
{
p->m = 10 ; // (p.operator->())->m = 10
}
Инструкция p->m интерпретируется как (p.operator->())->m. Аналогично, следующий пример демонстрирует, как перегрузить оператор доступа к члену класса ->.
Пример
Когда приведённый выше код скомпилирован и выполнен, он выдаст следующие результаты:
10 12 11 13 12 14 13 15 14 16 15 17 16 18 17 19 18 20 19 21Другие расширения