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

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

Войти
Регистрация
Восстановить пароль
 
 
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
#1

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

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

Объясните, зачем нужен указатель this, как его применять в классах, если можно небольшой пример.
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2010, 22:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель this - как и когда его использовать (C++):

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

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

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

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

Когда стоит использовать класс, а когда лучше обойтись без них? - C++
Когда стоит использовать класс, а когда лучше обойтись без них? Когда следует использовать несколько классов? Вот, например. Программа...

Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию? - C++
1)Любезные,скажите когда надо исп. списки инициализации, а когда можно заменить констуктором по умолчанию? 2) правильно ли...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
15.01.2010, 23:24 #16
novi4ok, молчеловек - это кто?
я?
insideone?
Genius Ignat?
Syltan?

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

Не по теме:

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

0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
15.01.2010, 23:29 #20
Цитата Сообщение от Genius Ignat Посмотреть сообщение
malloc отдыхает
...
причём здесь malloc?
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
15.01.2010, 23:31 #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;
}
1
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.01.2010, 23:32 #22
Сообщение от Genius Ignat
malloc отдыхает
Значит отдыхает.
Ну что привязался.
Просто sizeof в параметре увидал.
Мысль проскользнула какая-то.
0
insideone
Модератор
Автор FAQ
3639 / 918 / 49
Регистрация: 10.01.2010
Сообщений: 2,469
15.01.2010, 23:40 #23
2 ISergey Спасибо, а принципиально возвращать char& или qstring& ? Я имею ввиду производительность. И... применительно к многобайтовым кодировкам это будет работать так же?
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
16.01.2010, 00:00 #24
принципиально возвращать char&
В данном случаи да..
0
insideone
Модератор
Автор FAQ
3639 / 918 / 49
Регистрация: 10.01.2010
Сообщений: 2,469
16.01.2010, 00:08 #25
В смысле... почему? Я думал что так передается ссылка т.е. адрес.
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
16.01.2010, 12:11 #26
Цитата Сообщение от insideone Посмотреть сообщение
В смысле... почему? Я думал что так передается ссылка т.е. адрес.
совет: почитай книгу по С++. много вопросов отпадёт.
рекомендую эту: isbn 5-8459-1121-4
1
insideone
Модератор
Автор FAQ
3639 / 918 / 49
Регистрация: 10.01.2010
Сообщений: 2,469
16.01.2010, 16:34 #27
Оператором new ты выделяешь 20 байт в памяти.
Далее возвращаешь указатель на этот кусок памяти, грубо говоря указатель - это адрес 1 элемента куска памяти.
И разве есть разница возвращать указатель на char или на свой класс? Это же все равно один адрес.
Книжку полистал
Когда же лучше использовать параметры-ссылки, а когда – параметры-указатели? В
конце концов, и те и другие позволяют функции модифицировать объекты, эффективно
передавать в функцию большие объекты типа класса. Что выбрать: объявить параметр
ссылкой или указателем?
Как было сказано в разделе 3.6, ссылка может быть один раз инициализирована
значением объекта, и впоследствии изменить ее нельзя. Указатель же в течение своей
жизни способен адресовать разные объекты или не адресовать вообще.
Поскольку указатель может содержать, а может и не содержать адрес какого-либо объекта, перед его использованием функция должна проверить, не равен ли он нулю.
Если параметр объявлен
как ссылка, функция получает его l-значение, а не копию. Лишнее копирование
исключается.
Т.е. вроде тут тоже описывается что разницы нет. Т.к. мне не нужно изменять адрес объекта (ведь это возвращаемое значение а не какая то переменная в функции) то можно возвращать что угодно. Ну и ладно. Вопрос был в том что не хуже ли по производительности возврат MyClass& чем PrimitiveClass& и я понял что нет.
1
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
16.01.2010, 17:18 #28
insideone:
Круто изъяснил.
Что к такому изъяснению, привел простой указатель this.
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
17.01.2010, 02:21 #29
insideone, и к чему вы это написали....

Добавлено через 3 часа 48 минут
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Что к такому изъяснению, привел простой указатель this.
Ни к чему оно не привело... так как insideone даже не понял на какой вопрос дал ответ...
1
insideone
Модератор
Автор FAQ
3639 / 918 / 49
Регистрация: 10.01.2010
Сообщений: 2,469
17.01.2010, 18:47 #30
2 ISergey ну почему же. я дал ответ на свой же вопрос: есть ли разница в производительности кода возвращающего MyClass& и возвращающего PrimitiveClass&. Ответ - нет. Цитаты которые меня подтолкнули сделать такие выводы я вынес для того чтобы это не казалось моей выдумкой.

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

И в общем и целом это полезный пример как неправильно было возвращать this ))) лучше было бы написать перегрузку = и если объект сравнивается с объектом того же типа сравнить адрес входного объекта с this чтобы избежать присваивания себе. Хотя вроде выше упоминалось
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2010, 18:47
Привет! Вот еще темы с ответами:

Когда нужно использовать &ссылки ,а когда *указатели? - C++
Желательно с примерами

Когда использовать WinAPI, а когда функции языка? - C++
Не совсем понимаю, когда нужно использовать WinAPI в приложении, а когда функционал самого ЯП (С/С++). Для той же работы с файлами...

Как использовать указатель на переменную во входящем параметре функции? - C++
Нашел код для решение гиперболического уравнение с помощью разностных схем. Возникли некоторые вопросы. Вот сам код: double...

Зачем использовать Указатель на указатель? - C++
Подскажите зачем использовать Указатель на указатель? И как работают двумерные массивы за счет указателей?


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

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

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