|
0 / 0 / 0
Регистрация: 22.03.2013
Сообщений: 45
|
|
Полиморфизм и виртуальные фукнции23.03.2013, 14:10. Показов 1344. Ответов 14
Метки нет (Все метки)
Здравствуйте.При написание программы у меня возникла одна неприятность. Вот какая картина. У меня существует 4 класса,первый-родитель,а остальные три-наследники.Последнии три хранят динамический массив типа int ,float,double(каждому классу один массив). Теперь к задаче,у меня создан массив объектов через указатель на класс родитель и мне надо через методы заполнить все эти дин.массивы,которые хранятся в классе наследников. Как это реализовать?
Добавлено через 2 часа 5 минут Никто не может помочь ?
0
|
|
| 23.03.2013, 14:10 | |
|
Ответы с готовыми решениями:
14
Исключения, возвращающие данные из фукнции Создание фукнции с элементами формы Фукнции для работы со строками [AnsiString] |
|
40 / 40 / 8
Регистрация: 29.01.2009
Сообщений: 244
|
|
| 23.03.2013, 16:16 | |
|
объяви в каждом классе один и тот же виртуальный метод, который будет заполнять в каждом классе по своему массив, в родителе будет чисто виртуальный метод.
Потом будет достаточно пройтись в цикле по массиву, и вызвать у каждого объекта этот метод.
1
|
|
|
0 / 0 / 0
Регистрация: 22.03.2013
Сообщений: 45
|
||||||
| 24.03.2013, 15:11 [ТС] | ||||||
|
QenT, возможно Вы не так поняли. У меня массивы заполняет пользователь. Т.е. у меня должно быть три метода.Вот какие
0
|
||||||
|
40 / 40 / 8
Регистрация: 29.01.2009
Сообщений: 244
|
|
| 24.03.2013, 15:32 | |
|
Покажите весь код
1
|
|
|
0 / 0 / 0
Регистрация: 22.03.2013
Сообщений: 45
|
||||||
| 24.03.2013, 15:41 [ТС] | ||||||
|
Он не маленький.
я тут реализовал это через double ,но это не целесообразно.
0
|
||||||
|
40 / 40 / 8
Регистрация: 29.01.2009
Сообщений: 244
|
|
| 24.03.2013, 15:54 | |
|
Здесь, что то не работает?
Скопировал эти классы и вызвал конструктор у каждого без проблем...
1
|
|
|
0 / 0 / 0
Регистрация: 22.03.2013
Сообщений: 45
|
||||||||||||||||
| 24.03.2013, 16:05 [ТС] | ||||||||||||||||
|
QenT, все работает. Но здесь я реализовал заполнение через double ,хотя пользователь может вводить как и int,и float ,и double.
Вот заполнение для массива int* DataInt; в классе intOb
0
|
||||||||||||||||
|
40 / 40 / 8
Регистрация: 29.01.2009
Сообщений: 244
|
||||||
| 24.03.2013, 16:26 | ||||||
|
Не самый лучший пример изучения полиморфизма для виртуальных методов, так как тут активно используется "полиморфизм" типов.
Вообще можете просто скопировать в каждый класс редактирующий метод требуемого типа, все будет работать. Добавлено через 1 минуту Элементарный пример:
1
|
||||||
|
0 / 0 / 0
Регистрация: 22.03.2013
Сообщений: 45
|
|
| 24.03.2013, 16:51 [ТС] | |
|
QenT, да это не изучение,а уже использование. Основы виртуальных функций знаю,а вот глубже эта тема мне не известна. Спасибо за помощь. Реализую Вашим способом,т.к. если использовать double ,то при больших вычислениях будет погрешность.
Добавлено через 18 минут QenT, хм..одна проблема решилась,вот теперь как отобразить введенный значения.
0
|
|
|
40 / 40 / 8
Регистрация: 29.01.2009
Сообщений: 244
|
|
| 24.03.2013, 16:56 | |
|
Для сомнительного использования:
GetInt(...) GetFloat(...) GetDouble(...) Для вывода: GetString(...)
1
|
|
|
0 / 0 / 0
Регистрация: 22.03.2013
Сообщений: 45
|
|
| 24.03.2013, 17:01 [ТС] | |
|
QenT, Хочу поправится. Ваш способ,к сожалению, не работает.Ошибка
[bcc32 Error] Unit2.cpp(594): E2015 Ambiguity between 'Create::set_data(int,int) at Unit2.cpp:40' and 'Create::set_data(float,int) at Unit2.cpp:41'
0
|
|
|
40 / 40 / 8
Регистрация: 29.01.2009
Сообщений: 244
|
|
| 24.03.2013, 17:12 | |
|
а что в тех строчках, на которые указывает компилятор?
Вообще он указывает на не однозначность входящих данных.
1
|
|
|
0 / 0 / 0
Регистрация: 22.03.2013
Сообщений: 45
|
||||||
| 24.03.2013, 17:19 [ТС] | ||||||
|
QenT, вот код,который заполняет массивы.
0
|
||||||
|
40 / 40 / 8
Регистрация: 29.01.2009
Сообщений: 244
|
|
| 24.03.2013, 17:54 | |
|
Укажите нужный тип:
CreateOb[i]->set_data((float)StrToFloat(Memo2->Lines->Strings[a]),a); Должно помочь.
1
|
|
|
0 / 0 / 0
Регистрация: 22.03.2013
Сообщений: 45
|
|
| 24.03.2013, 18:15 [ТС] | |
|
QenT, Вы правы,помогло. Сейчас попробую реализовать вывод. Что получится напишу. Спасибо еще раз за помощь.
Добавлено через 19 минут QenT, все работает. Огромное спасибо за потраченное на меня время.
0
|
|
| 24.03.2013, 18:15 | |
|
Помогаю со студенческими работами здесь
15
Виртуальные фукнции Полиморфизм, виртуальные функции
Полиморфизм и виртуальные методы
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|