|
2 / 2 / 2
Регистрация: 13.05.2012
Сообщений: 28
|
||||||||||||||||||||||||||
Вызов метода производного класса через обращение к методу базового класса23.11.2012, 17:00. Показов 7793. Ответов 12
Метки нет (Все метки)
Добрый день.
Изучаю основы ООП, наткнулся на проблему. Если создавать классы внутри main.cpp, то всё нормально. Если же создавать в разных файлах, то компилятор ругается. Видимо, я где-то путаюсь и чего-то недообъявляю. Суть отражена в заголовке, но распишу немного подробнее: Есть класс world, и производный от этого класса класс player. У обоих классов есть функция void draw(). Хочу реализовать вызов player::draw(), обращаясь к world::draw() из main.cpp. Единственная ошибка компилятора указывает на файл world.cpp. main.cpp:
world.h:
world.cpp:
player.h:
player.cpp:
0
|
||||||||||||||||||||||||||
| 23.11.2012, 17:00 | |
|
Ответы с готовыми решениями:
12
Вызов виртуального метода базового класса из указателя производного Вызов объектом базового класса функцию из производного класса! Можно ли из базового класса обратится к виртуальному методу производного? |
|
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
|
||||||
| 23.11.2012, 17:20 | ||||||
|
Если у тебя player производный от дров то ты вначале player должен написать
0
|
||||||
|
2 / 2 / 2
Регистрация: 13.05.2012
Сообщений: 28
|
|
| 23.11.2012, 17:24 [ТС] | |
|
0
|
|
|
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
|
||||||
| 23.11.2012, 17:26 | ||||||
|
В player.h напиши
0
|
||||||
|
2 / 2 / 2
Регистрация: 13.05.2012
Сообщений: 28
|
||
| 23.11.2012, 17:29 [ТС] | ||
|
Если писать вместо кавычек '<' и '>', то подразумевается, что файл находится в папке компилятора "include". Перемещать туда файлы с проекта - даже по логике заведомо неверно. Пожалуйста, прочитайте внимательнее содержимое файлов и описание проблемы.
0
|
||
|
|
|
| 23.11.2012, 17:31 | |
|
Если не ошибаюсь, функция draw должна быть виртуальной.
0
|
|
|
Каратель
|
|
| 23.11.2012, 17:35 | |
|
базовый класс ничего не знает о производном
http://habrahabr.ru/post/64369/ то что вы хотите
0
|
|
|
2 / 2 / 2
Регистрация: 13.05.2012
Сообщений: 28
|
||||||||
| 23.11.2012, 17:48 [ТС] | ||||||||
|
Почему, если записывать классы в main.cpp, например, нижеописанным образом, то всё работает?
Хочу я банального: иерархию классов, где у каждого класса есть draw(), и класс world все эти классы наследует. И чтобы через класс world, буквально одной строчкой можно было вызвать функции draw() сразу у всех классов, у которых они есть. Может быть я изначально делаю что-то не так?
0
|
||||||||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 23.11.2012, 18:09 | |
|
ohyou, ну для этого наоборот, класс world должен наследоваться от player. У Вас же в коде класс player наследуется от world. То, как Вы хотите это реализовать, ИМХО, не логично.
0
|
|
|
|
|
| 23.11.2012, 18:20 | |
|
Мда, я не так понял изначально. Думал, нужно чтоб при вызове метода производного объекта, он как раз и вызывался. Хотя, по идее, это вариант как раз и правилен, не вижу смысла в том.
0
|
|
|
2 / 2 / 2
Регистрация: 13.05.2012
Сообщений: 28
|
||
| 23.11.2012, 18:25 [ТС] | ||
|
Есть N-ное количество классов с функцией draw(). И мне, допустим, нужно вызвать у всех классов эту функцию. Как мне это сделать?
0
|
||
|
|
|
| 23.11.2012, 18:42 | |
|
ohyou, это и называется полиморфизм. Для этого draw должна быть виртуальной (желательно чистой виртуальной).
0
|
|
|
13 / 13 / 2
Регистрация: 22.10.2011
Сообщений: 35
|
||||||||||||||||
| 23.11.2012, 19:10 | ||||||||||||||||
|
Примерно так:
Для кода:
0
|
||||||||||||||||
| 23.11.2012, 19:10 | |
|
Помогаю со студенческими работами здесь
13
Вызов метода производного класса через указатель на базовый класс Вызов методов производного класса из базового Вызов метода базового класса из класса-потомка
Как сложить объект базового класса с объектом производного(наследуемого класса) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
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
Использованы. . .
|