我正在尝试使用派生类应该设置的数组来创建一个基类。应用程序是一个俄罗斯方块游戏,所以我希望有一个BaseShape类,它包含每个派生类(即SquareShape、TShape等)将根据特定形状的旋转设置的旋转数组。
class BaseShape
{
public:
BaseShape();
BaseShape(int my_rot[4][5][5]);
~BaseShape();
int rot[4][5][5];
int i_rot;
};
class SquareShape : public BaseShape
{
public:
SquareShape();
~SquareShape();
};我希望在SquareShape类中设置rot成员的值。我尝试了几种方法,例如在派生类的构造函数中分配数组(然后了解到不能分配数组)、在SquareShape初始化程序列表中设置数组(然后了解到不能初始化派生类中的基类‘成员’初始化器),以及将数组传递给基类构造函数并将成员初始化为参数,后者无法用错误进行编译:
error: invalid conversion from ‘int (*)[5][5]’ to ‘int’ [-fpermissive]
rot{my_rot}所以我想知道是否真的有一种方法来实现这一点,或者是否有一种更简单的方法来实现它。
发布于 2017-03-12 17:14:06
数组是不可复制的,您可以使用std::array代替。
using Rot = std::array<std::array<std::array<int, 5>, 5>, 4>;
class BaseShape
{
public:
BaseShape();
BaseShape(Rot my_rot) : rot(my_rot) {}
~BaseShape();
Rot rot;
int i_rot = 0;
};发布于 2017-03-12 17:11:45
然后了解到不能在派生类的初始化器中初始化基类成员。
..。严格地说,这是正确的,但与直接初始化类成员不同,您可以调用适当的构造函数:
#include <iostream>
struct Base {
int x;
Base(int a) : x(a) {}
};
struct Foo : Base {
Foo(int a) : Base(a) {}
};
int main() {
Foo f(1);
std::cout << f.x << "\n";
}我使用了一个没有数组的示例,因为一旦使用了std::array或std::vector,数组就不再是问题了。
https://stackoverflow.com/questions/42750379
复制相似问题