Неявный указатель this

Язык C++ / Неявный указатель this

Ключевое слово this представляет собой неявно определенный указатель на сам объект. С его помощью функция-член определяет, с данными какого объекта ей предстоит работать. Каждая функция-член класса неявно содержит в качестве член-данного указатель:

ИмяКласса *this;

При вызове член-функции ей передается неявный аргумент, содержащий адрес объекта, для которого эта функция вызывается.

class example {
  int m;
public:
  int readm() { return m; }  // return this->m
};
void f() {
  example aa, bb;
  int a = aa.readm();  // this указывает на aa
  int b = bb.readm(); // this указывает на bb
}

В первом случае функции readm() неявно передается указатель на объект aa, а во втором случае – bb.

Использование this необходимо в функциях, которые непосредственно работают с указателем на объект:

  • this  – указатель на объект (адрес объекта)
  • *this  – разыменованый указатель (сам объект)

Внутри тела класса могут использоваться ссылки или указатели на тот же класс. Это позволяет строить рекурсивные структуры класса.

Указатель this может быть использован только для нестатической функции-члена.

#include <iostream>
using namespace std;
class example {
private:
  char c1, c2;
public:
  void init(char b) {c1=b; c2=b+1;}
  example &increment() { c1++; c2++; return(*this);}
  example *where() {return(this);}
  void print() {cout << c1 << "  " << c2 << endl;}
};
int main() {
  example a, b;
  a.init('A');  // a.c1='A', a.c2='B'
  b.init('B');  // b.c1='B', b.c2='C'
  a.print();  // A B
  cout << "&a=" << a.where() << endl; // &a=########
  a.increment().print();  // B  C
  b.increment().print();  // C  D
  cin.get();
  return 0;
}

Назад

Комментариев к записи: 1

  • SpeedSoccer 2

    Существуют, как правило, шаблонные классы, реализующие указатели, но избавляясь от ряда их недостатков.


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *