gpt4 book ai didi

C++类最佳实践

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:30 25 4
gpt4 key购买 nike

我想了解一些设计 C++ 类时的最佳实践。

在上下文中,我有一个名为 Vec3 的 C++ 类。

class Vec3{
private:
float elements[3];
public:
Vec3(Vec3 v1){...}
Vec3(int x, int y, int z){...}
Vec3 add(Vec3 v1){...}
Vec3 add(int x, int y, int z){...}
...
Vec3 multiply(Vec3 v1){...}
...
int dotProduct(Vec3 v1){...}
Vec3 normalize(){...}
....
int operator[](int pos){...}
};

所以,我有这个类对大小为 3 的 Vector 进行计算。我想知道什么更好。是否使用指针。

我是否应该返回指针并将我的参数作为指针。

Vec3 add(Vec3 v1) or Vec3* add(Vec3 v1) or Vec3* add(Vec3* v1) or ....

现在我很困惑,我不知道我是否应该在类里面使用指针。我想总有办法将我的参数发送到不处理指针的函数...

Vec3* v2 = new Vec3(1,1,1);
Vec3 sum = v1.add(*v2);

有一个解决方案可能是我能想到的最好的解决方案..兼具两种功能

Vec3 add(Vec3 v2){...}
Vec3* add(Vec3* v2){...}

但我担心这会导致重复代码并且可能会产生开销。

谢谢您的回答...顺便说一句,我可以使用模板来更改 Vector 的大小,但我更喜欢单独保留我的 Vec3 类并创建一个 Vec4 类或将其命名为 Quaternion。

编辑这是我带来的解决方案。随意评论或修改或重用代码。一样东西。我只想提一下,就我而言,此类应该是透明的。就像我们加数字一样。

int i = 10;
int j = 15;
int k = i + k;

如果 add 重载修改调用函数的对象,在本例中为 i。我最终会以 k 为 i 的引用而 i 等于 25。但我们真正想要的是 k 等于 25 且 i,k 不变。

我的类(class)就是这样。 Vec3 k = i + k 不会修改 i 或 k 因为我们正在从这些值创建一个新数字。我返回引用的唯一情况是 +=, -=,++, --..., set([XYZ])?并归一化。

做一些像 myvec.setX(10).normalize().scale(10) 这样的事情会很有趣

注意:scale 应该返回一个引用。我没有看到它,但我想这样应该会更好。

Vec3 t = myvec.normalize().scale(100).copy();

http://pastebin.com/f413b7ffb

谢谢大家,我现在将处理 Matrix 类。

最佳答案

这些是我通常遵守的规则。注意“通常”,有时有不同的原因做事...

对于我不打算修改的参数,如果它们不是太大,我会按值传递,因为它们将被复制。如果它们有点大或不可复制,您可以使用 const 引用或指针(我更喜欢 const 引用)。

对于我打算修改的参数,我使用了引用。

对于返回值,我会尽可能返回一个拷贝。有时返回引用很方便(这适用于获取/设置的单个函数,在获取或设置项时不需要进行任何特殊处理)。

在我看来,指针真正闪耀的地方是我想要控制何时构建或析构的变量。

希望对您有所帮助。

关于C++类最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/625023/

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