是否通常使用像"vec3"这样的类只有标题?
这是我的实际代码:
#ifndef VECTOR3_H
#define VECTOR3_H
#include <math.h>
class vec3
{
public:
double x, y, z;
vec3();
vec3(double x, double y, double z) : x(x), y(y), z(z) {}
double lenght()
{ return sqrt(pow(x, 2) * pow(y, 2) * pow(z, 2));}
double lenghtSquared()
{ return pow(x, 2) + pow(y, 2) + pow(z, 2);}
double distance(vec3 v)
{ return sqrt(pow(x - v.x, 2) * pow(y - v.y, 2) * pow(z - v.z, 2));}
double distanceSquared(vec3 v)
{ return pow(x - v.x, 2) + pow(y - v.y, 2) + pow(z - v.z, 2);}
float angle(vec3 v)
{ return (float) acos(dot(v) / lenght() * v.lenght());}
double dot(vec3 v)
{ return x * v.x + y * v.y + z * v.z;}
void cross(vec3 v) {
double a = y * v.z - v.y * z; double b = z * v.x - v.z * x;
double c = x * v.y - v.x * y; x = a; y = b; z = c;}
void normalize()
{ x, y, z /= lenght();}
};
#endif // VECTOR3_H
Run Code Online (Sandbox Code Playgroud)
我是否可以更好地创建源文件而不仅仅是标题?如果你有一些提示,我喜欢他们:)
提前致谢
编辑:究竟是什么意思内联?
如果您希望它通常可用,那么类定义需要放在标题中.如果它在源文件中,那么它仅在该源文件中可用,而在其他文件中不可用.
成员函数定义可以像你的一样内联; 或者您可以将它们移动到源文件,只留下类中的声明.
两种方法都有利弊.仅标头实现更易于共享和分发,并提供更多优化机会,因为功能更容易内联; 但是如果许多翻译单元中包含许多大型函数,则会导致更长的构建时间,并且如果要将其用作类接口的"文档",则会使页眉更加混乱.
究竟是什么意思内联?
这意味着函数要么在类中定义,要么声明inline.在任何一种情况下,其目的都是放宽"一个定义规则",以便允许您在多个翻译单元中定义该功能; 它必须在使用它的每个单元中定义.如果您希望定义出现在标题中(可能包含在多个单元中),则必须执行此操作.它为编译器提供了更好的内联函数调用的机会,将其替换为函数体,以避免调用成本.
| 归档时间: |
|
| 查看次数: |
3793 次 |
| 最近记录: |