仅在C / C ++中使用标头时?

是否通常使用像“vec3”这样的类只有标题?

这是我的实际代码:

#ifndef VECTOR3_H #define VECTOR3_H #include  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 - vx, 2) * pow(y - vy, 2) * pow(z - vz, 2));} double distanceSquared(vec3 v) { return pow(x - vx, 2) + pow(y - vy, 2) + pow(z - vz, 2);} float angle(vec3 v) { return (float) acos(dot(v) / lenght() * v.lenght());} double dot(vec3 v) { return x * vx + y * vy + z * vz;} void cross(vec3 v) { double a = y * vz - vy * z; double b = z * vx - vz * x; double c = x * vy - vx * y; x = a; y = b; z = c;} void normalize() { x, y, z /= lenght();} }; #endif // VECTOR3_H 

我是否可以更好地创建源文件而不仅仅是标题? 如果你有一些提示,我喜欢他们:)

提前致谢

编辑:究竟是什么意思内联?

如果您希望它通常可用,那么类定义需要放在标题中。 如果它在源文件中,那么它仅在该源文件中可用,而在其他文件中不可用。

成员函数定义可以像你的一样内联; 或者您可以将它们移动到源文件,只留下类中的声明。

两种方法都有利弊。 仅标题实现更易于共享和分发,并提供更多优化机会,因为函数更容易内联; 但是如果许多翻译单元中包含许多大型函数,则会导致更长的构建时间,并且如果要将其用作类接口的“文档”,则会使页眉更加混乱。

究竟是什么意思内联?

这意味着函数既可以在类中定义,也可以在内inline声明。 在任何一种情况下,其目的是放宽“一个定义规则”,以便允许您在多个翻译单元中定义该function; 它必须在使用它的每个单元中定义。 如果您希望定义出现在标题中(可能包含在多个单元中),则必须执行此操作。 它为编译器提供了更好的内联函数调用的机会,将其替换为函数体,以避免调用成本。

这没什么不寻常的,没有。 在某些情况下(例如模板),它实际上是必需的。

实际上,将成员定义放在cpp文件中可以使代码更容易管理,并且可以更快地构建项目,但在这种情况下,代码很少,它不会有任何区别。