c++ - 具有与父级不同的变量名的 C++ 子结构
问题描述
我做了一个这样的 3d 矢量类
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
谢谢
解决方案
如何制作课程以便滚动俯仰和偏航参考与 x、y 和 z 相同的数据?
你不能。
由于您想引用一个对象,您可以使用引用来代替,但这会破坏复制 - 您可以通过使用用户定义的复制构造函数来修复。此外(就像您的重复一样)这会引入不必要的内存开销。
您可以做的是编写一个返回对成员的引用的函数。像这样:
struct Euler3D : Vector3D {
float& roll() { return x; }
但这也不理想,因为您可能至少需要第二组 const 重载,因此需要大量样板。
我认为这涉及到工会什么的。
您可以使用联合来拥有别名成员,但您不能拥有继承。这是允许的:
struct Euler3D {
union { float x, roll; };
union { float y, pitch; };
union { float z, yaw; };
};
您可以完全按照代码段中的方式使用它。
推荐阅读
- android - 围绕 SharedPreference 对辅助类进行单元测试
- c# - 调用 Steam Overlay 时如何在 Unity 中暂停游戏
- android - Android 10:ACTION_VIEW 损坏
- django - Django Ajax 表单验证
- java - 弹簧靴。ModelAndView addObject 不是替换标签
- java - 我正在使扫描仪裸码它黑屏而不是相机
- awk - awk 范围模式中的反向引用
- c++ - libjpeg 问题 - jpeglibmangler.h 具有未解析的外部符号
- ruby-on-rails - 如何搜索创建的数据少于思考狮身人面像
- python - 根据一个键查找多键字典的所有键