我是c ++的新手,并且在功能方面遇到了麻烦,这些功能似乎并不常见(或者我只是不知道正确的名称)。我创建了一个类向量,它应该像c ++向量一样工作,但可能有点简单。我知道你应该尽可能使用已经存在的类,但是对于练习我想创建一个自己的向量类。
所以我想做的只是创建一个可以某种方式“独立”调用的函数。之前我设法创建了一个函数标量(计算标量乘积),可以调用,如
myVector v1(5);
myVector v2(5);
for(int i=0; i<5; i++){ //missing proper function here, this is not part of the question
v1[i] = i;
v2[i] = i+1;
}
double prod = v1.scalar(v1,v2);
//or better
double prod2 = v1.scalar(v2);
然而,我真正想做的是创建一个不需要对对象进行操作的函数。我想使用类似
的功能double prod3 = scalar(v1,v2);
这是可能的,我应该在哪里定义函数。我希望它具有普通函数的属性而不是内联函数(如果可能)。此外,如果这种功能有一个名字,我很乐意知道。
/ BR Patrik
答案 0 :(得分:3)
您可以在向量类之外但在同一名称空间/文件中声明该函数,然后相应地定义它。
例如:
namespace math {
class Vector
{
...
}
double scalar(const Vector& v1, const Vector& v2);
}
然后在cpp:
namespace math {
Vector::Vector()
{
...
}
double scalar(const Vector& v1, const Vector& v2)
{
...
}
}
您不需要使用命名空间,但在我看来它更清晰。通话看起来像:
math::Vector v1;
math::Vector v2;
double prod = math::scalar(v1, v2);
正如评论中所指出的,您还可以将该方法作为类的静态成员。它也是一种避免添加到全局命名空间的方法。你可以这样做:
class Vector
{
static double scalar(const Vector& v1, const Vector& v2);
}
然后叫它:
myVector v1;
myVector v2;
...
double prod = myVector::scalar(v1,v2);