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

Перегрузка operator->() - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Упорядочить массив целых положительных чисел по возрастанию, определить номер минимального простого числа http://www.cyberforum.ru/cpp-beginners/thread1143773.html
помогите исправить программу на с++ Упорядочить массив целых положительных чисел по возрастанию, определить но- мер минимального простого числа до и после упорядочивания массива. Создать функции...
C++ Метод итерации для решения слау Ребят помогите исправить код. Уже второй день с ним бьюсь. *#include <iostream> #include <math.h> using namespace std; void iteration(double**a,double *b,double *x,int n) { int i,j; ... http://www.cyberforum.ru/cpp-beginners/thread1143769.html
C++ Найти количество четных цифр заданного натурального числа
Привет, всем))помогите пожалуйста написать код для задачи: найти количество четных цифр заданного натурального числа. вот мой код,но он не работает,помогите переделать)) #include<iostream>...
Динамические строки C++
Как сделать этот код динамическим? #include <cstddef> #include <iostream> #include <string> int main() { const std::size_t size = 3; std::string array;
C++ Необходимо вывести строку prime, если число простое, или composite, если число составное http://www.cyberforum.ru/cpp-beginners/thread1143749.html
Уважаемые программисты, проверьте, пожалуйста, решение задачи Проверьте, является ли число простым. Вводится одно число n. Формат выходных данных Необходимо вывести строку prime, если число...
C++ Функции: Как передать в качестве параметра число? Как передать в качестве параметра число? с++ подробнее

Показать сообщение отдельно
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 351

Перегрузка operator->() - C++

09.04.2014, 19:21. Просмотров 242. Ответов 4
Метки (Все метки)

Всем привет!

Прохожу тему дескрипторов и меня удивляет как работает перегруженный operator->().

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
//какой то интерфейс
struct Abstr {
virtual void show() {}
virtual ~Abstr() {}
};
 
//какой то класс наследует интерфейс
struct One : public Abstr { 
void show () {cerr << “One\n”;}
};
 
//создаем хендл на абстракцию
struct handle {
Abstr* ptr;
Abstr* operator-> () {return ptr;}
handle (Abstr* pp): ptr(pp) {}
};
 
void func(handle h) {
h->show();
}
 
int main()
{
One test;
func(&test);
return 0;
}
В конечной функции func объект хендла, через перегруженный operator-> возвращает объект Abstr, который в дальнейшем вызывает функцию show(). Но если мы разложим операции в функции func, то получиться, что “h->” возвращает “ptr”, после чего мы получаем ptrshow(), а не ptr->show(). Почему корректна такая конструкция, а не что-то подобное этому: h->->show()?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.