在c ++中调用没有对象的函数

时间:2014-02-03 19:02:48

标签: c++ function

我是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

1 个答案:

答案 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);