当前位置:  开发笔记 > 编程语言 > 正文

C++类最佳实践

如何解决《C++类最佳实践》经验,为你挑选了1个好方法。

我想在设计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添加(Vec3 v1)或Vec3*添加(Vec3 v1)或Vec3*添加(Vec3*v1)或....

现在我很困惑,我不知道是否应该在我班上使用指针.我想总有一种方法可以将我的参数发送到不处理指针的函数...

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.我最终将ak作为对i的引用并且我等于25.但是我们真正想要的是ak等于25且i,k不变.

这就是我班上的工作方式.Vec3 k = i + k不会修改i或k,因为我们正在根据这些值创建一个新数字.我返回引用的唯一情况是+ =, - =,++, - ...,set([XYZ])?并规范化.

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

注意:比例应返回参考.我没有看到它,但我想这应该更好.

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

http://pastebin.com/f413b7ffb

谢谢大家,我现在正在研究Matrix课程.



1> Arnold Spenc..:

这些是我通常坚持的规则.注意'通常',有时候有理由采取不同的做法......

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

对于我打算修改的参数,我使用了一个引用.

对于返回值,我将尽可能返回副本.有时返回引用很方便(这对于get/set的单个函数很有效,在获取或设置项时不需要进行任何特殊处理).

在我看来,指针确实闪耀的地方是变量,我想在构造或破坏时控制它.

希望有所帮助.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有