我正在尝试用C ++编写以下Java代码:
public class Block {
private int[][] block;
public Block(int[][] block) {
this.block = block;
}
}
public class Block1 extends Block {
public Block1() {
super(new int[][]{{2,3},{3,1}});
}
}
下面你可以看到我将代码翻译到C ++的程度。基本上我希望Block是一个通用类,它帮助继承类(目前只有Block1)将有关它们的数据存储为2D数组。这些数组应该在子类的构造函数中初始化。 但是我不能让超级调用在Block1中正常工作,我也不知道如何将2D数组作为参数发送,或者如何再次正确地存储对它的引用。如果你们能告诉我这件事,那真是棒极了。
(我稍后会在课程中添加更多方法 - 这只是与问题相关的最基本的东西。)
Block.h:
#ifndef BLOCK_H_
#define BLOCK_H_
namespace mtch {
class Block {
public:
Block(int _block[][2]);
virtual ~Block();
private:
int block[2][2];
};
} /* namespace mtch */
#endif /* BLOCK_H_ */
Block.cpp:
#include "Block.h"
namespace mtch {
Block::Block(int _block[][2]) {
block = _block;
}
} /* namespace mtch */
Block1.h:
#include "Block.h"
#ifndef BLOCK1_H_
#define BLOCK1_H_
namespace mtch {
class Block1 : public Block {
public:
Block1();
virtual ~Block1();
};
} /* namespace mtch */
#endif /* BLOCK1_H_ */
Block1.cpp:
#include "Block1.h"
namespace mtch {
Block1::Block1() : Block(new int[][]{{2,2},{2,3}}) {
}
}
我希望你明白我在这里想要完成的事情。 :P
答案 0 :(得分:0)
block是您定义的静态数组,您不能简单地为其指定动态数组以将指针弯曲到正确的内存位置。您必须将每个元素复制到块中。最简单的方法是使用std::vector<std::vector<int>>
而不是int [2] [2]来阻止。另一种方法是在任何地方使用简单的一维数组。你可以创建int *类型的块,并使所有函数也采用int *。然后你可以在Block1()中新建int [4]并初始化Block1()体内的内存。此外,您必须确保删除[]内存,因为它不会像静态数组那样自动发生。多维数组有点icky