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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
O_Q
-11 / 2 / 0
Регистрация: 10.04.2016
Сообщений: 53
#1

Используются ли на практике указатели на указатели объектов? - C++

09.07.2016, 08:24. Просмотров 1509. Ответов 67
Метки нет (Все метки)

Имеются ввиду указатели именно на объекты, а не динамические массивы.
Например такой: Object** obj;
А как насчёт такого: Object*** obj;

Если такие приёмы используются, приведите пример, где это целесообразно.
Какие аналоги применяются в таких языках как C#?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2016, 08:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Используются ли на практике указатели на указатели объектов? (C++):

Как на практике используются указатели на члены класса - C++
Вопрос №3. А как на практике используются указатели на члены класса? Они в реальном коде вообще используется? Приведите пример когда они...

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

Через указатели на указатели посчитать сумму двух чисел и записать в третье - C++
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной - C++
Мой код. #include <iostream> #include <stdlib.h> #include<iomanip> using namespace std; void min_max(int*pa, int*pb,...

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

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

67
rikimaru2013
C++ Game Dev
2439 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
09.07.2016, 09:01 #2
Цитата Сообщение от O_Q Посмотреть сообщение
Имеются ввиду указатели именно на объекты, а не динамические массивы.
Например такой: Object** obj;
А как насчёт такого: Object*** obj;
Это не указатели на объект. Но вы пишите в утвердительной форме - у вас есть противоположная информация?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,671
Записей в блоге: 5
09.07.2016, 09:27 #3
O_Q, поскольку значение по указателю * в динамической памяти может быть реализованно как массив, то ** это массив массивов, т.е 2d массив. Так почему не быть массиву массивов массивов - 3d массиву?
0
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
09.07.2016, 09:30 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
O_Q, указатель на указатель может быть передан в качестве аргумента в функцию которая собирается вернуть в качестве результата указатель на объект и собирается это сделать через аргумент. Тройной звездочке с ходу задачку не придумаю
2
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,671
Записей в блоге: 5
09.07.2016, 09:37 #5
Цитата Сообщение от vxg Посмотреть сообщение
Тройной звездочке с ходу задачку не придумаю
Инициализируем двумерный массив указатель ** в функции передавая его по указателю.
Хотя передача ссылки на указатель проще: T **& ptr_to_T
ps
Цитата Сообщение от O_Q Посмотреть сообщение
Имеются ввиду указатели именно на объекты, а не динамические массивы.
не проснулся ещё. Всё можно удалить.
0
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
09.07.2016, 09:45 #6
IGPIGP, ссылки не есть хорошо это раз, а два это то что тс хочет пример использования без массивов - с массивами все просто - достаточно лишь посчитать звездочки и объявить что это массив такой вот размерности
1
Ferrari F1
613 / 507 / 101
Регистрация: 27.01.2015
Сообщений: 2,951
Записей в блоге: 1
Завершенные тесты: 1
09.07.2016, 09:47 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
O_Q, например в сортировке массива указателей...
Массив указателей
2
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,671
Записей в блоге: 5
09.07.2016, 09:50 #8
Цитата Сообщение от vxg Посмотреть сообщение
ссылки не есть хорошо это раз
Почему?
Цитата Сообщение от vxg Посмотреть сообщение
, а два это то что тс хочет пример использования без массивов
это я увидел, но позже.
0
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
09.07.2016, 09:55 #9
IGPIGP, потому что если в функцию передается что-то что может быть в ней изменено лучше дать об этом знать всему свету передавая в нее указатель. исключением могут быть лишь функции в которых участвуют потоки (там так исторически заложено) или, может быть, перегрузка некоторых операторов в которой без ссылки получится адское уродство
0
O_Q
-11 / 2 / 0
Регистрация: 10.04.2016
Сообщений: 53
09.07.2016, 10:22  [ТС] #10
Спасибо за ответы.
Может вы работали с языками со сборкой мусора, там такие указатели не доступны в принципе. Как в этом случае можно провести аналогию в решении подобных задач?

Цитата Сообщение от O_Q Посмотреть сообщение
Какие аналоги применяются в таких языках как C# или Java?
На всякий случай опережаю вопрос "что конкретно тебе нужно от этого?": мне сейчас важна не какая-то конкретная задача, а понять принципы использования многоуровневых указателей в С++ и аналогия этих механизмов в Java-подобных языках. Какие задачи этим решаются и решаются ли вообще, возможно придуманы лучшие способы обхода мимо многоуровневых указателей, такие как контейнеры или что-то в этом роде.

Если нужно больше конкретики, поставлю философский вопрос так: если запретить многоуровневые указатели на (!) объекты в С++, какие трудности возникнут и будут ли они критичны. Как без них обходятся Java-подобные языки и какие трудности при этом возникают?
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
09.07.2016, 10:23 #11
В современном C++ и обычные-то одинарные указатели использовать не следует.
0
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
09.07.2016, 11:20 #12
O_Q, в Ява вы не можете вернуть результат в аргументе если аргумент это не обьект и вы всегда можете модифицировать аргумент внутри функции если он является объектом - просто такой язык - нет опции = другой подход

Добавлено через 26 секунд
Nick Alte, ну ну
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,671
Записей в блоге: 5
09.07.2016, 13:25 #13
Цитата Сообщение от vxg Посмотреть сообщение
IGPIGP, потому что если в функцию передается что-то что может быть в ней изменено лучше дать об этом знать всему свету передавая в нее указатель.
Холиварный момент. Указатель по ссылке это самое то, если говорить про адское.
Цитата Сообщение от O_Q Посмотреть сообщение
там такие указатели не доступны в принципе
Не совсем. Объявить ссылку на ссылку насколько я помню можно (C#). В С++ нельзя. Но в конкретной ситуации связанной с передачей T** чтобы получить изменение T* аналогии нет. В C# например, всё передаётся ссылками, потому что всё - ссылки. Кроме встроенных типов значения и строк, а так же пользовательских структур. Но при передаче типов значения по ссылке ключевые слова ref и out присутствуют лишь в списке параметров/аргументов. Сами переменные объявляются по значению. В сравнении с С++ это ближе к ссылкам. Указатель же в отличие от ссылки нормальный тип в том смысле, что он и объявляется и передаётся одинаково.
1
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
09.07.2016, 15:05 #14
IGPIGP, скорее не холивар а лайвхак) среднего ума сопровождающий разработчик быстрее осознаёт что передача в функцию адреса указателя и присвоение значения разыменованию этого адреса внутри функции происходит не спроста. В случае со ссылками его может ждать упс

Добавлено через 57 секунд
По второму - я писал не за шарп а за яву
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,671
Записей в блоге: 5
09.07.2016, 16:13 #15
Цитата Сообщение от vxg Посмотреть сообщение
среднего ума сопровождающий разработчик быстрее осознаёт что передача в функцию адреса указателя и присвоение значения разыменованию этого адреса внутри функции происходит не спроста.
Дык если ему для этого постоянно нужен значок напоминания разыменования, то может это его личное дело? В конце концов, когда нужно избежать копирования, но недопустить модификации, есть возможность объявить формальный параметр константной ссылкой. И если юзер "нечаянно" скастит переменную, чтобы обойти её константность и это будет ненамеренно(!), то это уже не склероз, а болезнь Паркинсона (imho). Или недержание передних конечностей, по крайней мере. В таком разе клиент запросто модифицирует и переданное по указателю (ненамеренно ). А константную ссылку всё-таки, ещё скастить надо, - мороки больше.
Но я согласен с тобой в том, что если предусмотрен возврат nothing (0/NULL/nullptr), то указатель, это выбор истинных джентльменов.
0
09.07.2016, 16:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2016, 16:13
Привет! Вот еще темы с ответами:

Указатели на слонов или А зачем нужны указатели? - C++
Знаю что таких вопросов было уйма, но я так и не нашел ответа на свой вопрос. Для чего нужны указатели? Что такое указатели я знаю, это...

Написать программу сортировки через указатели на указатели - C++
Вот моя программа #include <iostream> #include <conio.h> #include <string> using namespace std; //Сортировка "пузырьком". ...

Указатели и адреса объектов - C++
Вот код: #include <conio.h> #include <iostream.h> void main() { clrscr(); int a,b,*pa=&a,*pb=&b,z=pb-pa; ...

Указатели на массив объектов - C++
здравствуйте! есть такой код: #include <cstdlib> #include <iostream> using namespace std; class samp {


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

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

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