gpt4 book ai didi

c++ - C++子结构的变量名称与父结构不同

转载 作者:行者123 更新时间:2023-12-01 14:43:14 25 4
gpt4 key购买 nike

我做了这样的3D vector 类

struct Vector3D {
float x;
float y;
float z;

Vector3D() {
x = 0;
y = 0;
z = 0;
}

Vector3D(float x1,float y1,float z1=0) {
x = x1;
y = y1;
z = z1;
}

//member functions for operator overloading, dot product, etc.
};

但是现在我想针对欧拉角创建一个子类。到目前为止,我有
struct Euler3D : Vector3D {
float roll;
float pitch;
float yaw;
};

我如何进行分类,以使俯仰和偏航与x,y和z引用相同的数据?我认为它涉及 union或其他东西。
我希望能够实现以下目标:
Euler3D a = {1, 2, 3};
cout << a.x << endl; // prints 1
a.x = 1.5;
cout << a.roll << endl; //prints 1.5

谢谢

最佳答案

How do I make the class so that roll pitch and yaw reference the same data as x, y and z?



你不能。

由于要引用一个对象,因此可以使用引用代替,但这会破坏复制-您可以使用用户定义的一个来修复复制构造函数。此外(就像您的复制一样),这会引入不必要的内存开销。

您可以做的是编写一个函数,该函数返回对该成员的引用。像这样:
struct Euler3D : Vector3D {
float& roll() { return x; }

但这也不理想,因为您可能需要至少第二组const重载,因此需要大量样板。

I think it involves union or something.



您可以使用联合来拥有别名成员,但是不能拥有继承。这是允许的:
struct Euler3D {
union { float x, roll; };
union { float y, pitch; };
union { float z, yaw; };
};

您可以完全按照您的代码段使用它。

关于c++ - C++子结构的变量名称与父结构不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60762662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com