我有两个班级:
class A
class B: class A
我想创建一个矩阵,每个指针指向B(1X2的垫子)。
所以我定义了:
A **mat;
mat = new A*[1];
*mat = new B[2]; // call the constructor.
现在我有2个元素:mat [0] [0],mat [0] [1]。
mat [0] [0]已初始化,但mat [0] [1]为NULL。
请帮忙。
答案 0 :(得分:1)
如果sizeof(A) < sizeof(B)
而不是A
的数组不等同于B
的数组。
由于在第二次分配中,您分配的 concreete对象大于*mat
应该指向的对象,当您访问第二个元素时,它不会访问第二个B
元素,而是切入第一个。
无论如何,这是我的猜测,因为你没有告诉我们很多关于A
和B
的信息。
修改强>
要回答您的评论,我首先要限制您使用的原始指针数量。请改用vector向量。向量的每个元素都可以是指向A
的原始指针。其运行时类型为B
或C
。
#include <vector>
std::vector<std::vector<A*> > mat(1, std::vector<A*>(2, (A*)0));
答案 1 :(得分:1)
如果需要指向B的指针,则无需指定任何关于A的内容。由于B派生A,您只需为较大的空间分配空间(在本例中为B)。
对于指针矩阵,您将需要以下内容。
B *** mat;
mat = new B**[1]; //Dimension 1
mat[0] = new B*[2]; //Dimension 2 (array of pointers)
mat[0][0] = new B(); //Allocate B in [0][0]
mat[0][1] = new B(); //Allocate B in [0][1]
但如果您知道它总是1x2,请使用以下内容:
B * mat[1][2];