Sey*_*ore 4 c++ class function vector
我有两节课:
class Object {
public:
Object();
virtual void update();
virtual void draw();
private:
protected:
int x, y, tick;
}
Run Code Online (Sandbox Code Playgroud)
和
class Unit : public Object {
public:
Unit();
void update();
private:
protected:
}
Run Code Online (Sandbox Code Playgroud)
然后我在sepparate .cpp文件中定义构造函数和函数.
这是Object的定义:
Object::Object() {
x = y = 0;
};
Object::update() {
tick ++;
};
Object::draw() {
// All my draw code is in here.
};
Run Code Online (Sandbox Code Playgroud)
单位:
Unit::Unit() : Object() {
};
Unit::update() {
Object::update();
// Then there's a bunch of movement related code here.
};
Run Code Online (Sandbox Code Playgroud)
一切都可以单独工作,但是在尝试从向量中调用函数时遇到了问题.
vector<Object> objects;
Run Code Online (Sandbox Code Playgroud)
然后我在我的void main()中执行此操作:
for (int i = 0; i < objects.size(); i ++) {
objects[i].update();
objects[i].draw();
};
Run Code Online (Sandbox Code Playgroud)
这样可以很好地绘制所有内容,但它只调用update()的Object verson而不是派生类定义的版本.我是否必须为从Object类派生的每种类型创建一个向量,以便它可以工作,还是有另一种方法来调用派生函数?
提前谢谢 - 塞莫尔
是的,它调用方法class Object,因为你有一个class Object对象向量:
vector<Object> objects; // stores instances of class Object
Run Code Online (Sandbox Code Playgroud)
可能的解决方案是使用指针向量:
vector<Object*> objects;
objects.push_back( new Unit() );
Run Code Online (Sandbox Code Playgroud)
然后通过指针调用:
for (int i = 0; i < objects.size(); i ++) {
objects[i]->update();
objects[i]->draw();
}
Run Code Online (Sandbox Code Playgroud)