我有一个程序可以解决在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.0
或pointer[4].d = 10.0
等。
联合不起作用,因为我需要存储最少的内存。 (我将处理可能数百万点的重大问题)
有没有办法在C ++中执行此操作?
提前致谢!!!
答案 0 :(得分:0)
如果您的Class2
实际上来自Class1
,那么您可以拥有一个Class1*
数组。如果没有,我会将Class1
和Class2
基于一个公共基类,并且有一个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",对吧?