-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 146
1

Перегрузка оператора разыменования в умном указателе

20.10.2017, 20:58. Показов 4088. Ответов 3
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
template <class Type>
class SmartPointer{
private:
    Type* pointer;
public:
    SmartPointer(Type* p):pointer(p){};
    operator Type*() {return pointer;};
    Type& operator*()  { return *pointer; }
};
 
int main(void)
{
    int f = 7;
    SmartPointer<int> var(&f);
    int z = *var;
    printf("%d\n", z);
    return 0;
}
Объясните разницу между этим:
operator Type*() {return pointer;};
и этим
Type& operator*() { return *pointer; }

Почему и тот и тот правильно работает?
Где об этом подробно почитать?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2017, 20:58
Ответы с готовыми решениями:

Определение оператора разыменования
Здравствуйте. Подскажите, пожалуйста, по теории Из книги: classs Ptr{ //... X* operator-&gt;();...

Перегрузка оператора
Подскажите пожалуйста, способ перегрузки операторов &gt;= и &lt;= в следующей строке if ( ob.str &gt;= '0'...

Перегрузка оператора !=
Помогите разобраться с перегрузкой оператора != есть класс, в котором, в разделе private объявлен...

Перегрузка оператора <<
Пишу класс My_String #include &lt;iostream&gt; const int MAX = 1000; class My_String { private:...

3
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
20.10.2017, 21:51 2
В первом случае приведение к указателю, а во втором ссылка на объект.
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 146
20.10.2017, 22:09  [ТС] 3
Все равно синтаксис не до конца понятен.
0
Эксперт С++
1620 / 950 / 782
Регистрация: 06.02.2016
Сообщений: 2,449
Записей в блоге: 30
21.10.2017, 10:43 4
C++
1
2
operator Type*() {return pointer;};  // оператор приведение/преобразования типа, к указателю на Type
Type& operator*()  { return *pointer; }; // перегрузка оператора разыменования указателя
Добавлено через 12 минут
Ещё было бы неплохо добавить const
C++
1
2
operator Type*()const {return pointer;};
Type& operator*()  const { return *pointer; };
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2017, 10:43
Помогаю со студенческими работами здесь

Перегрузка оператора +
Здравствуйте! Не могу понять, из-за чего появляется ошибка. Вот программа, которая должна...

Перегрузка оператора ++
using System; namespace ConsoleApplication5 { class Pro {

Перегрузка оператора
public Set operator &lt; (Set ob1, Set ob2) { if(ob1.len &gt; ob2.len) return false; ...

Перегрузка оператора !=
помогите разобраться написал оператор перегрузки != но не могу сравнивать их в if вот...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru