我还是C ++的新手,我似乎无法在其他地方找到确切的答案。我试图初始化一个Box对象,在构造函数中需要2个浮点数。 Box源自Game Object。
我试过Box * box = new Box(20,20);
class GameObject {
public:
GameObject::GameObject(float Posx, float Posy) {
posx = Posx;
posy = Posy;
};
protected: //Positions
float posx;
float posy;
virtual void setPosition(float x, float y) { posx = x; posy = y;};
};
class Box : GameObject { // Box is Derived from GameObject
public:
float sizex;
float sizey;
void setSize(float x, float y) {sizex = x; sizey = y;};
};
答案 0 :(得分:4)
GameObject
需要初始化一个位置,如果没有该信息,您根本无法创建GameObject
。 Box
是实现的 GameObject
,因此Box
也需要使用位置进行初始化。
您需要为Box
创建一个构造函数,该构造函数将负责初始化其GameObject
位置。像这样:
class Box : GameObject {
public:
Box(float Posx, float Posy) : GameObject( Posx, Posy ) {}
/*...*/
};
大概你需要一种方法来构建一个位置和大小的Box
:
class Box : GameObject {
public:
Box(float Posx, float Posy, float Sizex, float Sizey)
: GameObject( Posx, Posy )
, sizex( Sizex ), sizey( Sizey )
{}
/*...*/
};
最后,您还可以为Box
添加一个构造函数,该构造函数表示默认构造 Box
从位置0,0
开始并且没有大小:
class Box : GameObject {
public:
Box() : GameObject( 0, 0 ), sizex( 0 ), sizey( 0 ) {}
/*...*/
};
答案 1 :(得分:1)
在我写这篇文章时,发布的代码如下:
class GameObject {
public:
GameObject::GameObject(float Posx, float Posy) {
posx = Posx;
posy = Posy;
};
protected:
float posx;
float posy;
virtual void setPosition(float x, float y) { posx = x; posy = y;};
};
class Box : GameObject {
public:
float sizex;
float sizey;
void setSize(float x, float y) {sizex = x; sizey = y;};
};
这不会编译,因为类GameObject
没有默认的构造函数,生成的类Box
的默认构造函数可以使用。
一个解决方法是为类Box
定义构造函数。
当你在这里时,你可能想要使用public
继承。
默认情况下class
继承为private
(与struct
相反)。
无论您发现自己使用private
继承,请考虑包含。
此外,例如,文字3.14
是double
,而不是float
,使用double
代替float
通常是个好主意。
它可以更快。
这肯定不那么尴尬。