Форум программистов, компьютерный форум CyberForum.ru

Вызов метода потомка через указатель на родителя - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как убрать глобальные переменные в коде? http://www.cyberforum.ru/cpp-beginners/thread1649337.html
Привет! Пожалуйста, помогите мне с этой задачей. Это работает. Но я хочу, чтобы обойтись без глобальных переменных. #include "stdafx.h" #include <stdio.h> #include <string.h> #include <malloc.h> #include <stdlib.h> #include <math.h> #include <assert.h> #include <iostream>
C++ Подсчитать, сколько пpошло воскpесений за период Подсчитать, сколько пpошло воскpесений от начала текущего кваpтала до последнего пpаздничного дня этого кваpтала. Известна текущая дата d.m.g. STL и Boost не знаю не учил) Есть мысль проверять текущую дату на наличие воскресения, и по 7 дней отталкиваться. Посоветуйте что нибудь. Была еще мысль расписывать каждое воскресение с помощью switch ну она слишком сложна в реализации и не практично. http://www.cyberforum.ru/cpp-beginners/thread1649327.html
C++ Как программно запросить информацию с сайта?
Подскажите как сделать взаимодействие c++ с браузером. Например,запускаем консольное приложение,вводим адрес страницы сайта, к примеру yandex.ru, и сохраняем весь код в текстовый документ для дальнейшего взаимодействия. Или 2 вариант , сразу взять с сайта интересующую нас информацию, к примеру курс доллара и так же записать это значение в текстовый документ. Если можно сделайте подробный...
Что не так в коде? Рассчитать значение у для значений х. Code::Blocks выдает ошибку. C++
рассчитать значение у для значений х, равных 4, 5, ..., 28,. на формулу не смотрите, фишка в том что код блокс выдает ошибку но в коде я уже проверял все вроде нормально #include<iostream> #include<cmath> using namespace std; int main() { int y,x,t; for(x=4;x<=28;x++) { t=x+2;
C++ Выполняя задания из книги Стенли Липпмана допустил ошибку. Не могу понять где. http://www.cyberforum.ru/cpp-beginners/thread1649277.html
Выполняя задания из книги Стенли Липпмана не могу понять где ошибка в коде с оператором While /*#include<iostream> using namespace std; int main() { int sum = 0; // сложить числа от 1 до 10 включительно
C++ Вычислить значение площади по формуле Вообщем, ни как не могу понять, как записать и вычислить значение площади в программе с помощью такой формулы. X и Y - координаты точек, я записал их в два отдельных массива - один masX, с координатой Х каждой точки по порядку, и второй masY соответственно. Вот сама формула: S=1/2*\left|\sum_{k=1}^{n}\left({X}_{k}+{X}_{k+1} \right)*\left({Y}_{k}-{Y}_{k+1} \right) \right| , где {X}_{0} , {Y}_{0}... подробнее

Показать сообщение отдельно
antonboom
bmstu-team
301 / 136 / 56
Регистрация: 10.01.2012
Сообщений: 419
Записей в блоге: 10

Вызов метода потомка через указатель на родителя - C++

28.01.2016, 02:07. Просмотров 299. Ответов 3
Метки (Все метки)

Всем доброго времени суток, никак не придумаю, как провернуть такое:
Пишу простенькую игру на cocos2dx.
Есть первый класс, CNode - он библиотечный, закрыт, в него ничего не можем добавлять, писать и прочее.
От него наследуется (и местами переопределяет родителя) класс CElement - описывающий общие характеристики элементов на игровом поле (различные клетки, поедаемые итемы, стены и пр). Не может быть абстрактным, нечистые виртуальные методы - пожалуйста.
От элемента наследуется большое количество классов, конкретно описывающие отдельные вещи.

Несколько элементов могут падать, но делают это все по-разному. Оперировать я могу с вектором СNode игрового поля.
Дискретно во времени мне нужно проверять может ли падать элемент и запускать это падение.
Как происходит сейчас, например
C++
1
2
3
4
5
6
7
8
9
10
/* Метод уровня, проверяющий возможность и запускающий падения элементов на нем */
void CLevel::checkFalldowns() {
    auto childs = getChildren();  // Получить вектор СNode уровня
    for (int i = 0; i < getChildrenCount(); i++) {  // Пройтись по нему в цикле
        CElement* child =  static_cast<CElement*>(childs.at(i)); // Приводим СNode к Элементу
        if (child->isStone()) // Если элемент камень
            static_cast<CStone*>(child)->startFallDown();  // Запускай у него метод падения и пр.
       // И так несколько условий на все падающие элементы ...
    }
}
Выглядит, очевидно, ужасно и я чувствую, что можно проще.
Хотелось бы, чтобы в цикле просто вызывали startFallDown у объекта СElement (по факту у одного и его потомков) и он сам смотрел, что за потомок его вызвал и использовал метод потомка.
Если делать startFallDown виртуальным, то вызовется метод СElement, а нужен метод потомка.
Делать его чисто виртуальным нельзя - структуре игры нужны объекты CElement в других местах (cocos2d решает).

Буду признателен за любую помощь, вопросы приветствуются.
Спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru