Форум программистов, компьютерный форум CyberForum.ru

оператор this - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 4.83
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
23.11.2011, 13:57     оператор this #1
Прочитал раздел и с книги Стратуструпа о операторе this. но не фига не понял где его использовать его применение
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
thick_int
Заблокирован
23.11.2011, 14:06     оператор this #2
Его, например, можно использовать в тех случаях, когда функция-член должна возвращать либо сам объект данного класса, для которого эта функция вызвана, либо ссылку или указатель на оный. И это далеко не единственный способ ипользования this.
Разные списочные и древовидные структуры также ипользуют эту штуковину во всю.
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
23.11.2011, 14:12  [ТС]     оператор this #3
Цитата Сообщение от thick_int Посмотреть сообщение
Его, например, можно использовать в тех случаях, когда функция-член должна возвращать либо сам объект данного класса, для которого эта функция вызвана, либо ссылку или указатель на оный. И это далеко не единственный способ ипользования this.
Разные списочные и древовидные структуры также ипользуют эту штуковину во всю.
Хотел спросить. а функции такие как воспроизведение медиа файлов надо самому писать или они есть в WinApi
Сыроежка
Заблокирован
23.11.2011, 14:20     оператор this #4
Цитата Сообщение от Sylar9 Посмотреть сообщение
Прочитал раздел и с книги Стратуструпа о операторе this. но не фига не понял где его использовать его применение
this - это не оператор, а указатель и представляет собой адрес объякта, для которого не статическая функция-член была вызвана. Если x - это объект класса T, то указатель this имеет тип T *. Если объект x является константным объектом класса T, то указатель this имеет тип const T *.

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

Расссмотрим простой код.

C++
1
2
3
int x, y, z = 10;
 
x = y = z;
Чтобы эта конструкция работала, нужно чтобы выражение y = z возвращало объект y, которой в свою очередь будет присвоен объекту x.

Другой пример

C++
1
2
3
int x = 0, y =1;
 
++x = y:
Здесь значением выражения ++x должен быть сам объект x, чтобы имел смысл присвоение ему значения переменной y.

Как это реализовать для объектов класса?
Пусть x - это объект класса T. Тогда операция ++x по аналогии с целочисленными объектами должна возвращать сам объект x после его инкремента. Делается это с помощью указателя this

C++
1
2
3
4
5
6
T & T::operator ++()
{
    /* иммитируем инкриментирование объекта */
    /* и возвращаем сам объект из функции */
   return ( *this );
}
Тогда мы можем выполнять для объекта класса аналогичный код, показанный выше

C++
1
2
3
T x, y;
 
++x = y;
так как значением выражения ++x будет сам объект x. Это стало возможным потому, что оператор=функция operator ++ получила адресс объекта в неявном параметре this. который ее вызвал, и смогла вернуть ссылку на этот объект опять-таки благодаря возврату разыменованного указателя this .

Важно также отметить, что когда внутри класса вы объявляете функцию - член класса с квалификатором const, то, фактически, этот квалификатор относится к неявному параметру this

Например,

C++
1
2
3
4
struct A
{
   void f() const;
};
Это эквивалентно тому, как если бы вы явно объявили эту функцию f с одним параметром.

C++
1
2
3
4
struct A
{
   void f( const A *this );
}
Но так как любая нестатическая функция -член класса получают этот параметр, то есть указатель на объект класса, вызвавший функцию, то запись решиди сократить, и сам параметр this передавать неявно.
mc.Duck
Заблокирован
23.11.2011, 15:01     оператор this #5
this - указатель на обьект, который вызвал метод класса...
Yandex
Объявления
23.11.2011, 15:01     оператор this
Ответ Создать тему
Опции темы

Текущее время: 11:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru