C ++继承(重写构造函数)

时间:2015-01-25 21:23:17

标签: c++11

我正在学习使用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)'

3 个答案:

答案 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);