Указатель this
не является членом класса. Это просто конструкция, которая используется в методах, принадлежащих классу, для ссылки на текущий экземпляр.
Если у вас есть такой класс:
class IntPair
{
public:
IntPair(int a, int b) : _a(a), _b(b) { }
int sum() const { return _a + _b; }
public:
int _a;
int _b;
};
Этому классу требуется место только для двух экземпляров int
для каждого экземпляра. После создания экземпляра и запуска метода sum()
этот метод вызывается с указателем на экземпляр, но этот указатель всегда приходит откуда-то еще, он не сохраняется в экземпляре объекта.
Например:
IntPair *fib12 = new IntPair(89, 144);
cout << fib12->sum();
Обратите внимание, как переменная, которая становится указателем this
, сохраняется вне объекта, в области его создания.
На самом деле вы всегда можете преобразовать метод, подобный приведенному выше, в:
static int sum2(const IntPair* instance)
{
return instance->_a + instance->_b;
}
Если вышеприведенное определено внутри класса (чтобы он мог получить доступ к закрытым членам), разницы нет. Фактически, это - это как методы реализованы за сценой; указатель this
- это просто скрытый аргумент для всех методов-членов.
Звонок станет:
IntPair* fib12 = new IntPair(89, 144);
cout << IntPair::sum2(fib12);