我正在学习使用C ++的OpenGL。我正在建造小行星游戏作为练习。我不太清楚如何覆盖构造函数:
projectile.h
class projectile
{
protected:
float x;
float y;
public:
projectile();
projectile(float, float);
float get_x() const;
float get_y() const;
void move();
};
projectile.cpp
projectile::projectile()
{
x = 0.0f;
y = 0.0f;
}
projectile::projectile(float X, float Y)
{
x = X;
y = Y;
}
float projectile::get_x() const
{
return x;
}
float projectile::get_y() const
{
return y;
}
void projectile::move()
{
x += 0.5f;
y += 0.5f;
}
asteroid.h
#include "projectile.h"
class asteroid : public projectile
{
float radius;
public:
asteroid();
asteroid(float X, float Y);
float get_radius();
};
的main.cpp
#include <iostream>
#include "asteroid.h"
using namespace std;
int main()
{
asteroid a(1.0f, 2.0f);
cout << a.get_x() << endl;
cout << a.get_y() << endl;
}
错误我得到了:
main.cpp:(.text+0x20): undefined reference to `asteroid::asteroid(float, float)'
答案 0 :(得分:1)
好的,刚想通了。
我实际上没有定义小行星构造函数,因为我认为它们会继承。但我认为我必须在asteroid.h中执行以下操作:
asteroid(float X, float Y) : projectile(X, Y){];
答案 1 :(得分:0)
您需要asteroid.cpp
。
即使继承自projectile
,对于非默认构造函数(即asteroid(float,float)
),仍然需要定义子类构造函数。
您还需要定义get_radius
,因为它没有在您的基类中定义。
这里看起来如何(我已经冒昧地将半径值传递给两个人):
#include "asteroid.h"
asteroid::asteroid(float r)
: projectile()
{
radius = r;
}
asteroid::asteroid(float x, float y, float r)
: projectile(x, y)
{
radius = r;
}
float asteroid::get_radius()
{
return radius;
}
答案 2 :(得分:0)
您可以使用:
语法来调用父级的构造函数:
asteroid(float X, float Y) : projectile (x ,y);