![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
Допустим, есть класс A. Этой мой класс, не производный от какого-то другого.
Есть два класса: AA : public A AB : public A классы AA и AB отличаются друг от друга (да и от класса A) только конструктором, а если точнее, то инициализацией одной константы. Мне нужно сделать массив, чтоб элементы массива - объекты классов AA и AB. Заранее неизвестно, какой элемент соотв какому классу. Как это сделать? В каком месте вызывать конструктор? Это вообще возможно? З.Ы. Я не пишу, как я пытался делать, потому что это скорее всего бред. -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| Darhazer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 28.9.2005 Где: HellCity (Sofia, Bulgaria) Репутация: 2 Всего: 29 |
1) Насколько я знаю, чтоб сделать массив из обектов, тебе нужен конструктор, у который для всех параметров есть дефолтние значения.
2) А нужно ли три класа чтоб проинициализировать одну константу с различним значениях? -------------------- I'm a wheel, I'm a wheel, I can roll, I can feel But you can't stop me turning 'Cause I'm the sun, I'm the sun, I can move, I can run But you'll never stom me burning |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Fedor,Честно гворя плохо тебя понял,но если все таки понял то:
Надо обьявить массив указателей на базовый класс A,а потом с помощью new создавать классы птомки AA и AB.У них будут вызываться нужные конструкторы. -------------------- Жизнь - печальная штука. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
без проблем. так и вызывай:
array[0] = new AA(1); array[1] = new AB(2); ( я предполагаю что у тебя массив указателей, но можно и без них: array[0] = AA(1);) -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Нельзя. Только массив указателей на базовый класс. P.S. Чуть не написал массив ссылок, но это разумеется бред. Это сообщение отредактировал(а) srd - 14.10.2005, 16:26 -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Если не ошибаюсь это теоретически возможно,только всякого смысла лишено. -------------------- Жизнь - печальная штука. |
|||
|
||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Почему? --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| Mad |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
Это возможно и теоритически и практически
Это сообщение отредактировал(а) Mad - 14.10.2005, 18:03 |
||||
|
|||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Mad
И в итоге имеем срезку... Массивы ссылок действительно явно запрещены в стандарте. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| srd |
|
||||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Это не массив ссылок. Массива ссылок в Си++ нет.
Тут будет скопирован подобъект A, а AA- и AB-части будут утеряны. Не уверен, что это то, что надо автору топика. Обычно это ошибочный код. -------------------- Не смей читать мою подпись!!! |
||||
|
|||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Да ты что! --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| Mad |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
естественно, ведь непосредсвено обьект можно нормально хранить только по указателю а если ты (даже в массив указателей) будеш ложить обьекты разных классов, то доступ будет только к общим членнам классов (т.е к элементам родтиельского класса). А преведенный выше код был только к этой фразе
Добавлено @ 18:28
что ты подразумеваеш под ссылкой (в С++ есть обьект класса и есть указатель на обьект класса) ? |
||||||
|
|||||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Но только по секрету! Еще там есть ссылка на объект класса. --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Приведи пример(сам че то я не догоняю).Насколько мне говорили,что независимые ссылки(а мы пытаемя создать из них массив )лишены всякого смысла(в практическом плане),хотя их можно создавать. Да ,а практически это не возможно т к независимые ссылки должны инициализироваться при их создании а это в массиве(в данном точно) не возможно.Полный список ограничений на ссылки любого типа(согласно Standart С++): [*]Нельзя ссылаться на другую ссылку [*]Нельзя получать адрес ссылки [*]Нельзя создавать массивы ссылок [*]Нельзя ссылаться на битовые поля [*]Ссылка должна быть иниц. до того как станет членом класс ,возвратить значение ф-ции или стать ее параметром ЗЫ Взято из С++ от Шилдта. Это сообщение отредактировал(а) nikitao - 14.10.2005, 18:50 -------------------- Жизнь - печальная штука. |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Ну и что? Сами-то объекты никуда не делись. Виртуальные функции, в крайнем случае - dynamic_cast<>() помогут. -------------------- Не смей читать мою подпись!!! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |