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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ системы счисления!!! http://www.cyberforum.ru/cpp-beginners/thread389856.html
напишите программу пожалуйста!!! Даны действительное число x, натуральное число q (0 =< x < 1, q => 2). Получить пять цифр q-ичного представления числа x, т.е. получить последовательность целых...
C++ Вывести последовательность чисел в виде линейчатых диаграмм Нужно вывести последовательность чисел в виде линейчатых диаграмм, числа считываются из файла, созданного пользователем. В первый Edit записывается длина создаваемого файла, во второй - число,... http://www.cyberforum.ru/cpp-beginners/thread389848.html
C++ Считать из файла три предложения и вывести их в обратном порядке
Помогите пожалуйста дорешить задачу!!! Файл я создала, а что дальше делать и как я не знаю... #include <fstream> #include <iostream> #include <string> int main() { std::ofstream...
Контрольная задача. C++
Ввести натурально число n. а) Определить, является ли оно палидромом. (Вроде готово) б) Если число n - палидром, то построить массив всех цифр числа, иначе вычислить сумму цифр числа в масиве....
C++ Выяснить, имеются ли среди чисел совпадающие http://www.cyberforum.ru/cpp-beginners/thread389833.html
Используя стандартную библиотеку шаблонов STL и класс list по работе с двунаправленным списком, выполнить следующие задачи:Даны натуральное число n, целые числа a1,a2,..,an.Выяснить, имеются ли среди...
C++ Определить среднее количество осадков, выпавших в дни, когда шёл дождь В массиве хранятся сведения о количестве осадков,выпавших за каждый день августа.Определить среднее количество осадков,выпавших в дни,когда шёл дождь? подробнее

Показать сообщение отдельно
Сыроежка
Заблокирован
23.11.2011, 14:20
Цитата Сообщение от 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru