Заблокирован
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Массив указателей на объекты подклассов21.04.2012, 19:28. Показов 3151. Ответов 9
Метки нет (Все метки)
Доброго времени суток всем!!!
Проф задал написать парсер простых математических выражений с использованием скобок. Код не должен выходить за рамки изученого матерьяла и не должен использовать сторонних библиотек Текущая проблема: По условию задания необходимо создать базовый класс "выражение"
от этого класса порождаются подклассы *(в качестве примера приведу только один, они все-равно все одинаковые) "Division" "Substraktion" "Addition" "Multiplikation" "Konstante"
далее в парсере я пытаюсь создать массив указателей с типом базового класса
когда константа или оператор прочитаны, они должны быть помещены в массив в виде объекта. Это необходимо для обработки постфиксных операций Теперь я хоть медленно но верно подобрался к самому вопросу: почему не получается сохранить указатель на объект сабкласса в массив? я это пытаюсь сделать вот так
и получаю ошибку 'conversion type' conversion from 'type1' to 'type2' exists, but is inaccessible Будьте добры, объясните почему данный вариант не работает, и что нужно сделать чтобы заработало Всем заранее благодарен. Всем творческих удач!!!
0
|
21.04.2012, 19:28 | |
Ответы с готовыми решениями:
9
Массив указателей на объекты Динамический массив указателей на объекты Динамический массив указателей на объекты класса Массив указателей на объекты разных типов |
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
||||||
21.04.2012, 19:57 | 2 | |||||
0
|
Заблокирован
|
|
22.04.2012, 13:12 [ТС] | 3 |
Большое спасибо!!! Сразу все заработало!!!
Добавлено через 17 часов 12 минут По ходу возник еще один вопрос. Тема для меня совсем новая, еще трудно сориентироваться что к чему, поэтому нужна помощь. В коде я присваиваю массиву базового класса сабкласс и пытаюсь обратиться к методу сабкласса expression.stack[ausdruck.top] = new Multiplikation; expression.stack[ausdruck.top]->getMembers(expression.stack[expression.top-2], expression.stack[expression.top-1]); однако, компилятор ругается на getMembers и говорит, что это не метод класса expression то есть получается он не создает объект сабкласса а создает объект базового класса, хотя я и говорю expression.stack[ausdruck.top] = new Multiplikation; Но почему? Тут я совсем перестаю понимать как что происходит. Заранее благодарен за помощь
0
|
Заблокирован
|
|
22.04.2012, 13:14 | 4 |
0
|
Заблокирован
|
|
22.04.2012, 13:29 [ТС] | 5 |
Слушай, Bers,
я конечно, очень благодарен за ссылку, однако, воспринимаю это как намек, на то, что я полностью тупорылый и ничего не читаю, и ты меня бедного решил просвятить. Но смею тебя заверить, что это не так и все лекции в университете я тоже посещаю. Практика и теория иногда разделены границей понимания, через которую нужно выстроить мост. Ты стоишь на той стороне а я на этой. Я тебя прошу положить доску что бы я мог перейти, а ты в ответ кидаешь в меня камень. Приблизительно так это выглядит. Я прочел о полиморфизме в трех разных книгах, но что-то понимание пока очень абстрактно. Я конечно, уверен, что если я прочту то же самое еще в 4-5 местах я скороее всего все пойму, но боюсь, что проект мой встрянет на долго, а вот профессор меня не поймет. Добавлено через 5 минут Вот, например, чтобы еще больше сузить круг непоняток. Я так нигде и не смог вычитать, является ли необходимым условием, что бы в сабклассе были определены все те же функции, что и в базовом классе? Или в сабклассе их может быть больше?
0
|
Заблокирован
|
|
22.04.2012, 13:42 | 6 |
Читать намёки - полезное умение, если общаешься с девочками.
Но если речь идет о программировании, то здесь уже нет места намекам. Все предельно четко и конкретно. Возьми учебный работоспособный пример, и проанализируй его. Если что-то будет не понятно - спрашивай. Спрашивай о логике конкретного работоспособного простейшего примера. Самый простой способ понять теорию - суметь применить её на практике. А что бы суметь применить, нужно понять область применения механизма. Это твой первый шаг в сторону понимания вопроса.
0
|
Каратель
|
|
22.04.2012, 13:45 | 7 |
вот тебе примитивный парсер выражения http://www.dreamincode.net/for... oop-style/
1
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
22.04.2012, 14:01 | 8 |
по поводу getMembers:
у вас в стеке хранятся указатели на Expression. Поэтому в коде вызывать только те функции, которые есть у класса Expression. Ок. Смотрим на этот класс:
1
|
Заблокирован
|
|
22.04.2012, 14:04 [ТС] | 9 |
Ага, то есть, все-таки у сабклассов должны быть такие же функции как и у базового класса!
Вот спасибо!!! А если есть методы не входящие в базовый класс, к ним можно как-то обратиться?
0
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
22.04.2012, 14:06 | 10 |
динамически кастить (dynamic_cast<Derivated*>(base)) указатель на базу в указатель на производный. если скастилось, то у вас будет указатель как раз на производный класс. и вот у него уже можно будет позвать специфичные для него функции. Правда это кривой подход, но тем не менее, так делать можно.
1
|
22.04.2012, 14:06 | |
22.04.2012, 14:06 | |
Помогаю со студенческими работами здесь
10
Как создать массив указателей на объекты Как понять: массив указателей на объекты классов? Указатель на массив указателей на объекты, передать в метод объекта Создать массив указателей на объекты класса, описывающего насекомых Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Что такое хорошо и что такое плохо, вид сбоку. Индивид и общество - грань не нарушения.
Hrethgir 18.01.2025
В моей личной жизни и времени, я рассуждаю категорией "хуже-лучше", в том плане, когда меня спросили например - "а зачем ты делаешь свой процессор?", то я ответил - "чтобы сделать свою жизнь лучше". . .
|
Передача по ссылке или по значению в Java?
InfoMaster 18.01.2025
В мире программирования на Java одним из ключевых аспектов, требующих глубокого понимания, является механизм передачи параметров в методы. Этот фундаментальный концепт часто становится источником. . .
|
Тернарный условный оператор в Python
InfoMaster 18.01.2025
В мире программирования существует множество инструментов и конструкций, позволяющих создавать эффективный и лаконичный код. Одним из таких инструментов является тернарный условный оператор, который. . .
|
Как удалить неотслеживаемые файлы из рабочего дерева Git
InfoMaster 18.01.2025
В процессе разработки программного обеспечения с использованием системы контроля версий Git часто возникает необходимость в управлении неотслеживаемыми файлами. Неотслеживаемые файлы (untracked. . .
|
Что делает код if __name__ == "__main__": в Python
InfoMaster 18.01.2025
В мире программирования на Python существует множество важных концепций, и одной из наиболее интересных является конструкция if __name__ == "__main__". Эта специальная конструкция играет ключевую. . .
|
Как заставить Git забыть об отслеживаемом файле, добавленном в .gitignore
InfoMaster 18.01.2025
В мире разработки программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, позволяя эффективно отслеживать изменения в коде и управлять ими. Однако. . .
|
Что означает use strict в JavaScript и для чего используется
InfoMaster 18.01.2025
В мире современной веб-разработки JavaScript играет ключевую роль как один из основных языков программирования. По мере его эволюции возникла необходимость в механизмах, которые помогли бы. . .
|
Как работать со скрытыми (hidden) элементами в jQuery
InfoMaster 18.01.2025
В современной веб-разработке управление видимостью элементов на странице является одним из ключевых аспектов создания интерактивных пользовательских интерфейсов. jQuery предоставляет мощный набор. . .
|
Как переключаться между ветками (Branch) с помощью checkout в Git
InfoMaster 18.01.2025
Ветки в Git являются одной из ключевых концепций для управления версионностью кода, позволяя разработчикам эффективно работать в команде и параллельно развивать программные проекты. Каждый новый. . .
|
Что такое стек и куча, чем они отличаются и где находятся
InfoMaster 18.01.2025
Понимание основных концепций памяти в программировании
В мире современного программирования эффективное управление памятью играет ключевую роль в создании производительных и надежных приложений. . . .
|
Как использовать комментарии в JSON
InfoMaster 18.01.2025
JSON (JavaScript Object Notation) представляет собой легкий и широко используемый формат обмена данными, который стал стандартом де-факто для веб-приложений и программных интерфейсов. При работе с. . .
|
Как заставить git pull перезаписать локальные файлы в Git
InfoMaster 18.01.2025
Проблема перезаписи локальных файлов в Git
При работе с системой контроля версий Git разработчики часто сталкиваются с ситуацией, когда необходимо синхронизировать локальный репозиторий с. . .
|