Я начинаю работать с наследованием в C++, но не могу понять, как вызвать метод из подкласса, если этот подкласс находится в массиве элементов его суперкласса , Когда я пытаюсь вызвать метод подкласса, он просто вызывает метод суперкласса.Вызов метода экземпляра подкласса в массиве
Это код, который я имею в main.cpp:
#include "SDL.h"
#include <iostream>
#include "shape.h"
#include "rectangle.h"
SDL_Surface * screen;
bool running = true;
rectangle Rectangle;
shape * Shapes[] = { &Rectangle }; // The array Shapes is initialized containing Rectangle
int main(int argc, char** argv) {
screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
while (running) {
// Rectangle.draw(screen); This calls the rectangle draw method fine
Shapes[0]->draw(screen); // This calls the shape draw method instead
}
return 0;
}
форма и прямоугольник являются два класса, я работаю с; прямоугольник является подклассом формы. Как форма, так и прямоугольник имеют функцию draw()
. Метод рисования в форме пуст, поэтому при его вызове ничего не происходит. Метод draw в прямоугольнике содержит только SDL_Quit()
, поэтому, если он называется экраном SDL_Surface
, он закроется. Но когда я вызываю Shapes[0]->draw(screen)
, он вызывает метод draw в классе фигур, а не в классе прямоугольника, хотя Shapes[0]
является экземпляром прямоугольника. Когда я вызываю draw()
на объект Rectangle, он вызывает метод draw()
из прямоугольника. Почему это?
Просьба показать нам определения обоих классов. Я предполагаю, что оба метода не являются виртуальными, или их подписи отличаются. – cdhowie