gpt4 book ai didi

c++ - 用户定义的结构/类计算

转载 作者:行者123 更新时间:2023-11-28 00:07:29 24 4
gpt4 key购买 nike

我曾经使用过 Unity,他们使用一个很酷的系统来添加和乘以 vector 。这是引用文献 ( http://docs.unity3d.com/ScriptReference/Transform.html ) 的简短摘录

foreach (Transform child in transform) {
child.position += Vector3.up * 10.0F;
}

如您所见,即使它们可能有不同的变量,它们也只能将两个 vector (结构/类)相加和相乘。现在,当我尝试进行这样的计算时,我必须分别添加二维浮点 vector 的 x 和 y。那么我如何添加像

这样的结构呢?
struct Vec2f{
float x;
float y;
};

一起写

Vec2f c = a + b;

代替

c.x = a.x + b.x;
c.y = a.y + b.y;

最佳答案

编辑:

您需要在结构中重载“+”、“-”等运算符。添加示例:

struct Vec2f
{
float x;
float y;

Vec2f operator+(const Vec2f& other) const
{
Vec2f result;
result.x = x + other.x;
result.y = y + other.y;
return result;
}
};

编辑 2:RIJIK 在评论中提问:

Also i wonder if there are some tricks to make the functions not to be so repetetive. I mean if i now want to use an operator i have to make a function for each operator even if there is no big difference between the functions besides the operator which is used. How do you approach in implementing calculations or many operators?

因此,您可以做的一件事是在 operator 中使用另一个运算符。像你这样的东西可以通过简单地否定第二个数字来将减法改为加法:

a - b 变成 a + (-b)

当然,您首先需要在结构中使用否定运算符才能做到这一点。示例代码:

struct Vec2f
{
float x;
float y;

Vec2f operator+(const Vec2f& other) const
{
Vec2f result;
result.x = x + other.x;
result.y = y + other.y;
return result;
}

Vec2f operator-() const
{
Vec2f result;
result.x = -x;
result.y = -y;
return result;
}

// we use two operators from above to define this
Vec2f operator-(const Vec2f& other) const
{
return (*this + (-other));
}
};

这样做的一个好处是,例如,如果您更改加法,则不需要更改减法。它会自动更改。

作为对此的回复:

But i don't understand why i should make the functions constant.

因为这样您就可以将此函数与常量变量一起使用。例如:

const Vec2f screenSize = { 800.0f, 600.0f };
const Vec2f boxSize = { 100.0f, 200.0f };
const Vec2f sub = screenSize - boxSize;

我在这里也使用花括号初始化,因为你没有定义任何构造函数。

关于c++ - 用户定义的结构/类计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34700191/

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