0

我有两节课:

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。

请帮忙。

4

2 回答 2

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];
于 2013-05-14T22:40:32.573 回答
1

如果's 的sizeof(A) < sizeof(B)数组A不等于B's 的数组。由于在第二次分配中您分配的具体对象大于*mat应该指向的对象,因此当您访问第二个元素时,它不会访问第二个B元素,而是切入第一个元素。

无论如何,这是我的猜测,因为您没有告诉我们太多关于Aand的信息B

编辑

要回答您的评论,我首先要限制您使用的原始指针的数量。改用向量的向量。向量的每个元素都可以是指向A. 可以有一个运行时类型Bor C

#include <vector>

std::vector<std::vector<A*> > mat(1, std::vector<A*>(2, (A*)0));
于 2013-05-14T22:18:03.887 回答