我有两节课:
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。
请帮忙。
我有两节课:
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。
请帮忙。
如果您需要指向 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];
如果's 的sizeof(A) < sizeof(B)
数组A
不等于B
's 的数组。由于在第二次分配中您分配的具体对象大于*mat
应该指向的对象,因此当您访问第二个元素时,它不会访问第二个B
元素,而是切入第一个元素。
无论如何,这是我的猜测,因为您没有告诉我们太多关于A
and的信息B
。
编辑
要回答您的评论,我首先要限制您使用的原始指针的数量。改用向量的向量。向量的每个元素都可以是指向A
. 可以有一个运行时类型B
or C
。
#include <vector>
std::vector<std::vector<A*> > mat(1, std::vector<A*>(2, (A*)0));