![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Mad |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
Да вспомнил, есть там такое (просто никогда не использую, по факту тотже указатель, только в профиль
А если надо получать доступ не только к полям радительского класса, то делаеш массив указателей:
Это сообщение отредактировал(а) Mad - 14.10.2005, 18:47 |
||||||||
|
|||||||||
| LPBOY |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Смысл тот же что и с указателями: например, можно создать массив в котором хранятся указатели на некий базовый класс. Тогда в нем можно хранить и указатели на производный класс. Фактически получаем массив разнородных объектов. Вызываемые виртуальные функции элементов массива будут делать нечто разное, в зависимости от динамического типа объекта. В С++ для ссылок неопределено должны ли они занимать место в памяти, поэтому всякие действия, которые могут привести к потребности знать адрес ссылки - запрещены: указатель на ссылку, массив ссылок. Хотя это можно обойти, например, вот так:
выдаст:
Добавлено @ 19:16
4 раза: 2 раза srd, 1 раз void и 1 раз я --------------------
Каждый человек по-своему прав, а по-моему нет... |
||||||||
|
|||||||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Нет, элементы-то указатели. --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 3 Всего: 106 |
Ради такого примера совсем необязательно создавать массив ссылок. Достаточно описать в базовом классе виртуальную функцию, например Create. А если нужна функция именно с разными параметрами, то вот ещё один вариант:
и
при условии, что архитектура классов, действительно неизменна Это сообщение отредактировал(а) GremlinProg - 14.10.2005, 19:34 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| LPBOY |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Я сделал это не "ради такого примера", а чтобы показать как обходным путем создать массив ссылок. Класс-враппер во время выполнения исчезает и получается, что в массиве находятся ссылки.
Если размеры базового и производных классов отличаются (что обычно и бывает), то ничего хорошего в этом варианте не получится --------------------
Каждый человек по-своему прав, а по-моему нет... |
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 3 Всего: 106 |
вообще-то как раз архитектура-то и не меняется, смотри первое сообщение. Так что это всё таки вариант неплохой.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Хорошо, приведи минимальный работающий пример твоего способа, чтобы я вкурил - о чем ты
--------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Вопрос мой в другом зачем именно ссылки(не указатели)можно использовать(независимые) Это сообщение отредактировал(а) nikitao - 14.10.2005, 20:05 -------------------- Жизнь - печальная штука. |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 3 Всего: 106 |
Вообще-то мне больше нравится вариант с базовым классом, правда я всё равно не стал бы делать массив указателей, а с моим вариантом, вот, пожалуйста, пример:
первый и второй члены массива инициированы - по заказу, остальные - по умолчанию. (все условности опустил, только идея) Это сообщение отредактировал(а) GremlinProg - 14.10.2005, 20:12 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Ну как я и говорил, если размер производных классов превышает размер базового, то получаем кашу с инициализацией. Бред...
--------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
А если не превышает (как в данном случае - только изменены сигнатуры конструктора) - непонятно зачем вообще нужна эта иерархия. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |