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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 384, средняя оценка - 4.66
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
#1

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

15.01.2010, 22:20. Просмотров 48270. Ответов 39
Метки нет (Все метки)

Объясните, зачем нужен указатель this, как его применять в классах, если можно небольшой пример.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2010, 22:20     Указатель this - как и когда его использовать
Посмотрите здесь:
C++ Тип void как возвращаемое значение функции: что он такое, зачем он нужен, где, когда и как его использовать?
Объяснить (с примерами) для чего нужен RTTI, как и когда его можно и нужно использовать C++
C++ Получить указатель из функции и использовать его в другой функции
Что значит константный указатель на объект, указатель на константный объект, и как это можно использовать? C++
Когда стоит использовать класс, а когда лучше обойтись без них? C++
C++ Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию?
C++ Когда нужно использовать &ссылки ,а когда *указатели?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
15.01.2010, 23:24     Указатель this - как и когда его использовать #16
novi4ok, молчеловек - это кто?
я?
insideone?
Genius Ignat?
Syltan?

Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.01.2010, 23:27     Указатель this - как и когда его использовать #17
Сообщение от insideone
data = new char[sizeof(*newData)];
malloc отдыхает
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.01.2010, 23:28     Указатель this - как и когда его использовать #18
insideone:
Может стоит подумать о Java
insideone
15.01.2010, 23:29
  #19

Не по теме:

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

zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
15.01.2010, 23:29     Указатель this - как и когда его использовать #20
Цитата Сообщение от Genius Ignat Посмотреть сообщение
malloc отдыхает
...
причём здесь malloc?
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
15.01.2010, 23:31     Указатель this - как и когда его использовать #21
insideone,
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
26
27
28
29
30
31
32
#include <iostream>
 
using namespace std;
 
class qstring{
    char* data;
    int Index;
public:
    qstring(const char* newData){
        data = new char[strlen(newData) + 1];
        //data = newData;
        strcpy(data, newData);
    }
    ~qstring(){ delete[] data; }
 
    char &operator[] (int newIndex){
        Index = newIndex;
        return data[Index];
    }
 
    void out() { cout << data << endl; }
};
 
int main()
{
    qstring QS("Hello World?");
    QS.out();
    QS[3] = '!';
    QS.out();
 
    return 0;
}
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.01.2010, 23:32     Указатель this - как и когда его использовать #22
Сообщение от Genius Ignat
malloc отдыхает
Значит отдыхает.
Ну что привязался.
Просто sizeof в параметре увидал.
Мысль проскользнула какая-то.
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,469
15.01.2010, 23:40     Указатель this - как и когда его использовать #23
2 ISergey Спасибо, а принципиально возвращать char& или qstring& ? Я имею ввиду производительность. И... применительно к многобайтовым кодировкам это будет работать так же?
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
16.01.2010, 00:00     Указатель this - как и когда его использовать #24
принципиально возвращать char&
В данном случаи да..
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,469
16.01.2010, 00:08     Указатель this - как и когда его использовать #25
В смысле... почему? Я думал что так передается ссылка т.е. адрес.
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
16.01.2010, 12:11     Указатель this - как и когда его использовать #26
Цитата Сообщение от insideone Посмотреть сообщение
В смысле... почему? Я думал что так передается ссылка т.е. адрес.
совет: почитай книгу по С++. много вопросов отпадёт.
рекомендую эту: isbn 5-8459-1121-4
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,469
16.01.2010, 16:34     Указатель this - как и когда его использовать #27
Оператором new ты выделяешь 20 байт в памяти.
Далее возвращаешь указатель на этот кусок памяти, грубо говоря указатель - это адрес 1 элемента куска памяти.
И разве есть разница возвращать указатель на char или на свой класс? Это же все равно один адрес.
Книжку полистал
Когда же лучше использовать параметры-ссылки, а когда – параметры-указатели? В
конце концов, и те и другие позволяют функции модифицировать объекты, эффективно
передавать в функцию большие объекты типа класса. Что выбрать: объявить параметр
ссылкой или указателем?
Как было сказано в разделе 3.6, ссылка может быть один раз инициализирована
значением объекта, и впоследствии изменить ее нельзя. Указатель же в течение своей
жизни способен адресовать разные объекты или не адресовать вообще.
Поскольку указатель может содержать, а может и не содержать адрес какого-либо объекта, перед его использованием функция должна проверить, не равен ли он нулю.
Если параметр объявлен
как ссылка, функция получает его l-значение, а не копию. Лишнее копирование
исключается.
Т.е. вроде тут тоже описывается что разницы нет. Т.к. мне не нужно изменять адрес объекта (ведь это возвращаемое значение а не какая то переменная в функции) то можно возвращать что угодно. Ну и ладно. Вопрос был в том что не хуже ли по производительности возврат MyClass& чем PrimitiveClass& и я понял что нет.
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
16.01.2010, 17:18     Указатель this - как и когда его использовать #28
insideone:
Круто изъяснил.
Что к такому изъяснению, привел простой указатель this.
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
17.01.2010, 02:21     Указатель this - как и когда его использовать #29
insideone, и к чему вы это написали....

Добавлено через 3 часа 48 минут
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Что к такому изъяснению, привел простой указатель this.
Ни к чему оно не привело... так как insideone даже не понял на какой вопрос дал ответ...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2010, 18:47     Указатель this - как и когда его использовать
Еще ссылки по теме:
Когда использовать WinAPI, а когда функции языка? C++
Как использовать указатель на переменную во входящем параметре функции? C++
Зачем использовать Указатель на указатель? C++
C++ Как использовать перегруженный оператор [ ], если дан не сам класс, а указатель на него?
О том, почему нелюбим goto; как его правильно использовать; и чем в моем случае его можно заменить? C++

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

Или воспользуйтесь поиском по форуму:
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,469
17.01.2010, 18:47     Указатель this - как и когда его использовать #30
2 ISergey ну почему же. я дал ответ на свой же вопрос: есть ли разница в производительности кода возвращающего MyClass& и возвращающего PrimitiveClass&. Ответ - нет. Цитаты которые меня подтолкнули сделать такие выводы я вынес для того чтобы это не казалось моей выдумкой.

С другой стороны в приведенном вами примере возврат char& грамотнее с функциональной точки зрения, т.к. это непосредственно выдает этот символ на присваивание и к тому же освобождает перегрузку оператора = и становится ненужной переменная index. Да, ваш код хорош, а мой был крив, больше не будет =) спасибо за опыт))

И в общем и целом это полезный пример как неправильно было возвращать this ))) лучше было бы написать перегрузку = и если объект сравнивается с объектом того же типа сравнить адрес входного объекта с this чтобы избежать присваивания себе. Хотя вроде выше упоминалось
Yandex
Объявления
17.01.2010, 18:47     Указатель this - как и когда его использовать
Ответ Создать тему
Опции темы

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