首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++中的派生类中分配数据成员数组?

如何在C++中的派生类中分配数据成员数组?
EN

Stack Overflow用户
提问于 2017-03-12 17:04:06
回答 2查看 47关注 0票数 0

我正在尝试使用派生类应该设置的数组来创建一个基类。应用程序是一个俄罗斯方块游戏,所以我希望有一个BaseShape类,它包含每个派生类(即SquareShape、TShape等)将根据特定形状的旋转设置的旋转数组。

代码语言:javascript
复制
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初始化程序列表中设置数组(然后了解到不能初始化派生类中的基类‘成员’初始化器),以及将数组传递给基类构造函数并将成员初始化为参数,后者无法用错误进行编译:

代码语言:javascript
复制
error: invalid conversion from ‘int (*)[5][5]’ to ‘int’ [-fpermissive]
   rot{my_rot}

所以我想知道是否真的有一种方法来实现这一点,或者是否有一种更简单的方法来实现它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-12 17:14:06

数组是不可复制的,您可以使用std::array代替。

代码语言:javascript
复制
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;
};
票数 1
EN

Stack Overflow用户

发布于 2017-03-12 17:11:45

然后了解到不能在派生类的初始化器中初始化基类成员。

..。严格地说,这是正确的,但与直接初始化类成员不同,您可以调用适当的构造函数:

代码语言:javascript
复制
#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::arraystd::vector,数组就不再是问题了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42750379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档