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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 4.83
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,927
Записей в блоге: 1
#1

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

23.11.2011, 13:57. Просмотров 5277. Ответов 4
Метки нет (Все метки)

Прочитал раздел и с книги Стратуструпа о операторе this. но не фига не понял где его использовать его применение
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2011, 13:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос оператор this (C++):

Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки - C++
Здравствуйте. В С++ я абсолютный новичок, поэтому с первым же заданием возникли определённые трудности. Будьте добры, помогите решить. Буду...

Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1 - C++
В С++ я ноль, помогите пожалуйста написать прогу Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1 ...

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * - C++
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор копирования, бинарный оператор суммы «*»,...

Для чего нужен оператор двоеточие, если два двоеточия - это оператор расширения области видимости - C++
для чего нужен оператор двоеточие ( : ), если два двоеточия( :: ) - это оператор расширения области видимости.

Почему обращение к методам осуществляется через оператор прямого доступа, а не через оператор указателей->? - C++
#include <iostream> using namespace std; class random { public: void Set(int b){a=b;} int Get(){return a;} private: ...

Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. - C++
Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. Шаг изменения...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
thick_int
Заблокирован
23.11.2011, 14:06 #2
Его, например, можно использовать в тех случаях, когда функция-член должна возвращать либо сам объект данного класса, для которого эта функция вызвана, либо ссылку или указатель на оный. И это далеко не единственный способ ипользования this.
Разные списочные и древовидные структуры также ипользуют эту штуковину во всю.
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,927
Записей в блоге: 1
23.11.2011, 14:12  [ТС] #3
Цитата Сообщение от thick_int Посмотреть сообщение
Его, например, можно использовать в тех случаях, когда функция-член должна возвращать либо сам объект данного класса, для которого эта функция вызвана, либо ссылку или указатель на оный. И это далеко не единственный способ ипользования this.
Разные списочные и древовидные структуры также ипользуют эту штуковину во всю.
Хотел спросить. а функции такие как воспроизведение медиа файлов надо самому писать или они есть в WinApi
0
Сыроежка
Заблокирован
23.11.2011, 14:20 #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 передавать неявно.
1
mc.Duck
Заблокирован
23.11.2011, 15:01 #5
this - указатель на обьект, который вызвал метод класса...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2011, 15:01
Привет! Вот еще темы с ответами:

Оператор break как оператор go to next - C++
Подскажите, в этом примере break эквивалентна действию оператора go to next?

Как перегрузить оператор<< и оператор>> ? - C++
Доброго времени суток. Застрял на двух вопросах и не как не могу найти инфу которвя мне помогла бы их решить. вопрос первый. В общем...

В Delphi есть оператор cost i of. и т.д. Есть ли в C++ такой же оператор? - C++
(C++ Builder XE5)

Оператор if - C++
Почему у меня оператор Else выдает как ошибку(Е2054 Misplaced else)? и в операторе if не нравится как я записал if((s==a)&amp;&amp;(f==p)); ? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.11.2011, 15:01
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru