Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
1

Указатели

22.02.2011, 23:46. Показов 1401. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, подскажите пожалуйста, есть ли хоть какая-нибудь литература по указателям в С++? А то ну совсем я их не понимаю.
Вот пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Tester {
public:
    Tester() {}
    virtual void method() {
        cout << "123456789\n";
    }
    Tester& operator^(const Tester& src) {
        if(this == &src) {
            return *this;
        }
        else {
            *this = src;
        }
    }
    string ch;
};
Почему тут написано вот так if(this == &src)
А тут вот так *this = src
Причем если *this = src поменять на this = &src
То будет ошибка. Заранее спасибо за литературу и объяснение
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2011, 23:46
Ответы с готовыми решениями:

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно....

Через указатели на указатели посчитать сумму двух чисел и записать в третье
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать...

Почему Лафоре использует указатели на указатели, вместо обмена значениями указателей?
Доброго времени суток! Задался теоретическим вопросом. Читал пример из книги Лафоре...

Используя нетипизированные указатели и указатели на подпрограммы обобщить сортировку пузырьком
Смысл задания в том, что нужно отсортировать массив структур из 3х полей по сумме координат есть...

10
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
22.02.2011, 23:53 2
Тут
C++
1
if(this == &src)
мы сравниваем адреса объектов. Т.е. this - и так адрес, а &src - адрес объекта src. Если адреса совпадают - то мы имеем дело с одним и тем же объектом.
А здесь
C++
1
*this = src
мы имеем дело со значениями, т.е. разыменовываем this, чтобы взять его значение, и присваиваем ему src (т.е. указатель this указывает на ту же память, а вот содержимое этой памяти поменялось).
Такое
C++
1
this = &src
естественно не прокатит, вы пытаетесь поменять константный указатель this так, чтобы он стал указывать на другую область памяти, что невозможно.
1
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
22.02.2011, 23:54 3
C++
1
*this = src
скопирует объект из src в this, а this = &src обозначало бы , что this всего лишь начало бы указывать на тот же объект, что хранится в src,но this - константный указатель, поэтому this = &src вызовет ошибку.
1
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
23.02.2011, 00:02  [ТС] 4
спасибо, а что на счет литературы? И еще вопросик, почему this является адресом?

Добавлено через 24 секунды
он при любом раскладе будет адресом во всех случаях?
0
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
23.02.2011, 00:07 5
this есть указатель, ну а в указателях хранятся адреса
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
23.02.2011, 00:07 6
BTR, да, this - указатель на сам объект, членом которого он является. Этот указатель неявно используется при всех обращениях к переменным класса. Если foo - член класса, то при использовании в методе этого класса конструкции foo = 10;, на самом деле неявно будет использоваться конструкция this->foo = 10;
Вот неплохая статья, мне она здорово помогла в своё время:
Массивы, строки, указатели
1
63 / 35 / 13
Регистрация: 21.10.2010
Сообщений: 538
23.02.2011, 00:12 7
Литературы по указателям нет-это не очень большая тема и она умещается во всех учебниках.
И еще вопросик, почему this является адресом?
Потому что вы его таким объявили, ведь указатель это по сути и есть адрес переменной, через который вы можете обращаться к переменной

Добавлено через 1 минуту
Для большего понимания: http://ru.wikipedia.org/wiki/%... 1%8B%D1%85)
1
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
23.02.2011, 00:12 8
Цитата Сообщение от hepr Посмотреть сообщение
Потому что вы его таким объявили
Кто-кто объявил?
1
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
23.02.2011, 00:26  [ТС] 9
огромное спасибо

Добавлено через 4 минуты
silent_1991 я же наконец понял как пользоваться operator
0
silent_1991
23.02.2011, 00:27
  #10

Не по теме:

Цитата Сообщение от BTR Посмотреть сообщение
я же наконец понял как пользоваться operator
С чем вас и поздравляю)))

1
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
23.02.2011, 00:43  [ТС] 11
Спасибо
0
23.02.2011, 00:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.02.2011, 00:43
Помогаю со студенческими работами здесь

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной
Мой код. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include&lt;iomanip&gt; using namespace std; ...

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов?
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;//...

Отсортировать массив и вывести на экран (массивы и указатели на указатели)
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F...

Указатели на указатели: для чего они могут понадобятся?
Изучаю C++, дошёл до указателей на указатели. Там пишут что эта тема не обязательна. Для чего они...

Зачем нужны все эти указатели (или не указатели)
Зачем надо DWORD, HANDLE, LPVOID?

Указатели на указатели, как правильно разыменовать, где ошибка?
1)Есть класс: Shape - абстрактный; у него есть классы наследники: Circle, Triangle. 2)Eсть...


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

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