我开始使用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;
}
形状和矩形是我正在使用的两个类; rectangle是shape的子类。形状和矩形都具有draw()
功能。形状中的draw方法是空的,因此在调用时没有任何反应。矩形中的绘制方法仅包含SDL_Quit()
,因此如果调用它,SDL_Surface
屏幕将关闭。但是当我调用Shapes[0]->draw(screen)
时,它会调用shapes类而不是矩形类中的draw方法,即使Shapes[0]
是矩形的实例。当我在Rectangle对象上调用draw()
时,它从矩形调用draw()
方法。这是为什么?
答案 0 :(得分:0)
您必须声明任何可被子类覆盖为virtual
的函数。
class Shapes {
// Some implementation information...
virtual void draw(SDL_Surface *screen);
};
class Rectangle : public Shapes {
// This method will override the Shapes version.
// You do not have to declare it virtual, IIRC, but it's advisable.
virtual void draw(SDL_Surface *screen);
};