一种或那种类型的C ++指针?

时间:2011-10-04 15:45:31

标签: object pointers types

我有一个程序可以解决在C中工作的大网格中的PDE,但是希望将它移植到C ++来学习面向对象的编程。

我的问题是我有两个数据结构,我们称之为 Class1 Class2 。为简单起见,我们假设 Class1 包含两个双打( a b ),而 Class2 包含四个双打( a,b,c d )。

现在,在运行时,我想生成某种动态数组,根据PDE的条件,将另一类 OR 保存在另一类。

类似的东西:

if (PDEtype == 1) pointer = new Class1[n]

else              pointer = new Class2[n]

之后,我将需要使用以下内容访问指针pointer[2].a = 1.0pointer[4].d = 10.0等。

联合不起作用,因为我需要存储最少的内存。 (我将处理可能数百万点的重大问题)

有没有办法在C ++中执行此操作?

提前致谢!!!

2 个答案:

答案 0 :(得分:0)

如果您的Class2实际上来自Class1,那么您可以拥有一个Class1*数组。如果没有,我会将Class1Class2基于一个公共基类,并且有一个BaseClass*的数组。

当然,您需要一些方法来了解条目的实际内容(如果适用,最好使用虚函数在C ++中完成)。

答案 1 :(得分:0)

你所拥有的实际上非常接近。问题是您需要事先创建指针,然后调用新的Class1 [n]。你的问题似乎需要弄清楚如何事先声明指针。

我可以想到两个选项:

1)不要担心声明两种不同的指针类型。声明一个指针类型(在这种情况下,将它作为Class2是有意义的 - 因为Class1可以被认为是Class1的"子集"然后只是将Class2中的任何未使用的值声明为某个指定值表示他们没有使用。

2)我甚至不确定这种技术是否正确,但这些线路肯定会有用:声明指针为Void *类型。您还需要定义ptr1和ptr2以分别指向Class1和Class2的类型。你会希望你的Void *指针实际上指向你定义的类,然后创建一个函数来将这个void *指针转换为类型为ptr1(指向Class1类型的指针)或ptr(指向Class2类型的指针)。 / p>

这非常类似于创建void *(指向void类型的指针),然后如果您的内存位置实际包含int,则将其转换为整数。然后,您可以将此强制转换视为指向整数的指针。

最后,你说"指针[2] .a = 1.0"和"指针[4] .d = 10.0"在你的例子中。你在创建一个类数组吗?如果你希望你的指针指向一个类,那么你最终会使用" pointer.a"和" pointer.d",对吧?