Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/382: Рейтинг темы: голосов - 382, средняя оценка - 4.92
241 / 9 / 7
Регистрация: 27.08.2009
Сообщений: 868

Указатель this - как и когда его использовать

15.01.2010, 22:20. Показов 71026. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните, зачем нужен указатель this, как его применять в классах, если можно небольшой пример.
2
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2010, 22:20
Ответы с готовыми решениями:

Тип void как возвращаемое значение функции: что он такое, зачем он нужен, где, когда и как его использовать?
Объясните пожалуйста про Void для оооочень далекого человека. Читаю книгу Шилдта, в принципе всё ясно, всё понимаю и пробую, но вот Void -...

Объяснить (с примерами) для чего нужен RTTI, как и когда его можно и нужно использовать
доброго времени суток. вопрос такой как я понял RTTI это свойсвто языка С++ которое было добавлено позднее его релиза, что бы...

Android NDK. Как пользоваться? Когда стоит использовать его вместо Android SDK?
Можно ли писать в нем готовые приложения Android?

40
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
15.01.2010, 22:31
Указатель this это константный указатель на объект.

Добавлено через 40 секунд
Спросишь зачем он нужен?
3
425 / 229 / 87
Регистрация: 25.03.2009
Сообщений: 744
15.01.2010, 22:33
Лучший ответ Сообщение было отмечено как решение

Решение

Syltan, нужен для того чтобы в методе не возникало неопределенности когда поле класса и параметры метода имеют одиноковое имя . this -> x = x;
7
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
15.01.2010, 22:34
Лучший ответ Сообщение было отмечено как решение

Решение

Данные у каждого объекта свои, а функции класса общие для всех объектов,
указатель this помогает, определить с данными какого объекта будет работать функция.
6
241 / 9 / 7
Регистрация: 27.08.2009
Сообщений: 868
15.01.2010, 22:35  [ТС]
А пример можно, как и когда его использовать, а то не могу понять как на практике?
1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
15.01.2010, 22:38
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Указатель this это константный указатель на объект.
Не верно. Указатель this является константным только в const методах.
Syltan, this является для объекта указателем на самого себя.
Для примера можно привести ситуацию когда одному из методов объекта необходимо вернуть указатель/ссылку на сам объект.
C++
1
2
3
4
5
6
7
8
class Foo{
public:
  Foo* GetThis()
  {
    // Возвращаем указатель на данный объект
    return this;
  }
};
3
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
15.01.2010, 22:42
Пример к тому что сказал Андрейка:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class MyClass{
 
int a;
public:
void set(int a);
 
};
 
void MyClass::set(int a){
this->a=a;      //полю класса присваиваются данные, определение кому присваивается.
 
 
}
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
15.01.2010, 22:46
Например, нужно передать текущий объект в какую-нибудь функцию:
C++
1
2
3
4
5
6
7
8
void PlayerInfo::Realize(int project, PlayerInfo& player2)
{
...
// выполнить действие над собой и вторым игроком
// this - указатель на нас
pi.customAction(*this, player2);
...
}
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
15.01.2010, 22:48
Путём разадресации this можно получить ссылку на объект.
Пример: разадресации

*this; //это уже есть обращение к адресу памяти, адрес которой хранит this.

Ссылка на объект используется как возвращаемое значение операции присваивания.
2
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
15.01.2010, 22:54
C++
1
2
3
4
5
6
7
8
9
10
11
class int_stack{
  private:
  int stack[10];
  int count;
public:
  int_stack& operator << (int& newData);
}
void main(){
  int_stack S;
  S << 1 << 2 << 3; // будет ошибка если не возвращать перегрузкой int_stack&
}
Что должна вернуть перегрузка << ? Конечно себя. Это можно сделать только через return (*this);
Кроме того если вы по какой то причине назвали переменную внутри функции класса так же как какая то переменная класса - различить их поможет this) Только помоему это ошибка так делать, себя запутывать... Лучше называть переменные по виду newVar.
3
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
15.01.2010, 23:07
insideone спасибо за развитие темы про ссылку *this:
Не решался написать, уж больно заготовка примера у меня сложная, не для новичков.
Может ты операцию присваивания напишешь.
Просто у меня пример с динамической памятью: сложно для новичков.

Добавлено через 7 минут
С помощью this в операции присваивания можно определить:
является присваиваемый объект, объектом которому присваивают
//короткий пример из некоторого кода
C++
1
2
3
4
5
const MyClass& MyClass:: operator = (const MyClass &p){
if(&p==this)return *this;     //объект нельзя присваивать самому себе.
 
return *this;
}
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
15.01.2010, 23:13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class qstring{
private:
    char* data;
    int Index;
public:
    qstring(char* newData){
        data = new char[sizeof(*newData)];
        data = newData;
    }
    qstring& operator[] (int newIndex){
        Index = newIndex;
    return (*this);
    }
    qstring& operator= (char newChar){
        data[Index] = newChar;
    return (*this);
    }
};
 
void main()
{   
    char x[12] = "Привет мир?";
    qstring QS(&x[0]);
    QS[10] = '!';
}
Чтобы после перегрузки [] дальше можно было использовать = так же как если бы мы писали просто "QS =" нужно возвращать (*this).
После последней строчки допишите "QS = '#';" будет изменен 10ый символ снова. Т.е. [] просто контролировало куда записывать, а возвращало себя для того чтобы можно было сократить код от
C++
1
2
QS[10];
QS = '!';
К более удобному приведенному выше.
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
15.01.2010, 23:18
Цитата Сообщение от insideone Посмотреть сообщение
data = new char[sizeof(*newData)];
ну и что ты хочешь этим сделать?
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
15.01.2010, 23:21
не отсюда начинать вам нужно, молчеловек. вы бы еще спросили на форуме что такое переменная.
сперва книжку нужно в руки взять, попытаться прочесть и понять. если хорошая книжка непонятна, стоит подумать: а сюда ли мне вообще? может в другую дверь?
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
15.01.2010, 23:22
ну и что ты хочешь этим сделать?
Правда бред... ладно эту строчку можно вычеркнуть =\ просто у меня возникла какая то мысль о динамическом выделении памяти и руки сами написали, я в этом пока не разбираюсь к сожалению.
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
15.01.2010, 23:24
novi4ok, молчеловек - это кто?
я?
insideone?
Genius Ignat?
Syltan?

0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
15.01.2010, 23:27
Сообщение от insideone
data = new char[sizeof(*newData)];
malloc отдыхает
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
15.01.2010, 23:28
insideone:
Может стоит подумать о Java
0
15.01.2010, 23:29

Не по теме:

Цитата Сообщение от Genius Ignat Посмотреть сообщение
malloc отдыхает
Это разве из C++ ?)
Может стоит подумать о Java
Может придумать свой язык программирования...?)

0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
15.01.2010, 23:29
Цитата Сообщение от Genius Ignat Посмотреть сообщение
malloc отдыхает
...
причём здесь malloc?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.01.2010, 23:29
Помогаю со студенческими работами здесь

Что такое yield return и когда его использовать?
Кто может простым языком объяснить, что есть yeild return и когда его юзать

Когда нужно использовать структуры, когда классы, а когда словарь?
Хеллоу. Не могу понять, когда, что, нужно использовать. Допустим мне нужно получить объект, который имеет список объектов. И...

Получить указатель из функции и использовать его в другой функции
Подскажите пожалуйста как из функции использовать в функции main указатель? пример void foo1() {u=sizeof(str1); int *l=&amp;u; }...

Что значит константный указатель на объект, указатель на константный объект, и как это можно использовать?
Подскажите, что значит константный указатель на объект, указатель на константный объект, и как это можно использовать??

Что такое указатель на фаил в делфи, как его получить и с чем его готовить
У меня вопрос я получаю имя файла вот тут procedure TForm1.Button5Click(Sender: TObject); var f_name:string; begin ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru