Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/46: Рейтинг темы: голосов - 46, средняя оценка - 4.70
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
1

оператор this

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

Author24 — интернет-сервис помощи студентам
Прочитал раздел и с книги Стратуструпа о операторе this. но не фига не понял где его использовать его применение
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2011, 13:57
Ответы с готовыми решениями:

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

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

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

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

4
Заблокирован
23.11.2011, 14:06 2
Его, например, можно использовать в тех случаях, когда функция-член должна возвращать либо сам объект данного класса, для которого эта функция вызвана, либо ссылку или указатель на оный. И это далеко не единственный способ ипользования this.
Разные списочные и древовидные структуры также ипользуют эту штуковину во всю.
0
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 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
Заблокирован
23.11.2011, 15:01 5
this - указатель на обьект, который вызвал метод класса...
0
23.11.2011, 15:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2011, 15:01
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru