在C 中没有对象的呼叫功能

call function without object in c++

本文关键字:呼叫 功能 对象      更新时间:2023-10-16

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

您可以在矢量类外声明该功能,但在同一名称空间/文件中,然后相应地定义。

例如:

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