当前位置 : 主页 > 手机开发 > 其它 >

是否可以从抽象/基础结构继承或在C中沿着这些行模拟某些东西?

来源:互联网 收集:自由互联 发布时间:2021-06-19
我目前正在使用一个使用由xyz坐标组成的结构的C程序,但有时这些坐标可能是指向量(力/速度类型,而不是数据结构),而在其他时候它可能指的是位置.我知道可以简单地使用一个结构来处
我目前正在使用一个使用由xyz坐标组成的结构的C程序,但有时这些坐标可能是指向量(力/速度类型,而不是数据结构),而在其他时候它可能指的是位置.我知道可以简单地使用一个结构来处理所有这些不同的条件,因为它们大多使用相同的数据类型(浮点数),但只是简单地保持我的数学组织(加上变量和结构名称)并防止事情变得混乱,有没有办法定义一个基本结构,它定义自己有三个浮点数,由另一个结构继承,更具体地定义结构应该是什么(如位置而不是速度等)?我知道C不是OOP,但似乎可以这样做这里是基础结构的样子:

struct ThreeDCartesianData
{
   float x;
   float y;
   float z;
};

更具体的结构将从中继承并可能定义额外的变量,或者为变量使用不同的名称.将使用多个位置结构,但我认为每组数据只有一个速度结构.我已经看到了类似的问题,但它们似乎都指的是更高级别的语言(C,C#等等)

你可以使用联盟.你的主结构将包含“派生”结构的联合以及一个“标志”字段,告诉你哪个联合成员是有效的:

enum { DERIVED11, DERIVED2, DERIVED3 };

struct derived1 { int x1; };
struct derived2 { char x2; };
struct derived3 { float x3; };

struct ThreeDCartesianData
{
   float x;
   float y;
   float z;
   int derivedType;
   union {
     struct derived1 d1;
     struct derived2 d2;
     struct derived3 d3;
   } derived;
};

然后你可以像这样使用它们:

struct ThreeDCartesianData data1;
data1.x=0;
data1.y=0;
data1.z=0;
data1.derivedType = DERIVED1;
data1.derived.d1.x1 = 4;

你可以像这样定义它们:

struct common
{
   int type;
   float x;
   float y;
   float z;
};
struct derived1
{
   int type;
   float x;
   float y;
   float z;
   int x1;
};
struct derived2
{
   int type;
   float x;
   float y;
   float z;
   char x2;
};
struct derived3
{
   int type;
   float x;
   float y;
   float z;
   float x3;
};

union ThreeDCartesianData {
     struct common c;
     struct derived1 d1;
     struct derived2 d2;
     struct derived3 d3;
};

并像这样使用它们:

union ThreeDCartesianData data1;
data1.c.type=DERIVED1;
data1.d1.x=0;
data1.d1.y=0;
data1.d1.z=0;
data1.d1.x1 = 4;

如果联合中的所有结构都具有相同顺序的相同类型的初始列表元素,则该标准允许您安全地从任何子结构访问这些字段.

网友评论