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

标签 c++ function

<分区>

我是 C++ 的新手,并且在使用看起来并没有什么不寻常的函数时遇到了麻烦(或者我只是不知道正确的名称)。我创建了一个类 vector ,它应该像 C++ vector 一样工作,但可能更简单一些。我知道您应该尽可能使用已经存在的类,但为了练习,我想创建一个自己的 vector 类。

所以我想做的只是创建一个可以以某种方式“独立”调用的函数。早些时候,我设法创建了一个函数标量(计算标量积),可以这样调用,

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帕特里克

最佳答案

您可以在 vector 类之外但在相同的命名空间/文件中声明该函数,然后相应地定义它。

例如:

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


正如评论中所指出的,您也可以将该方法作为类的静态成员。这也是一种避免添加到全局 namespace 的方法。你可以这样做:

class Vector
{
    static double scalar(const Vector& v1, const Vector& v2);
}

然后调用它:

myVector v1;
myVector v2;

...

double prod = myVector::scalar(v1,v2);

关于c++ - 在c++中调用没有对象的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21535529/

相关文章:

c++ - 在 this 关键字上调用函数

c++ - 修改vector的元素(按值,按引用)函数C++

javascript - 将 "this"替换为实际值

c++ - 列表初始化结合构造函数

c++ - std::vector 在重新分配时无论如何调用包含对象的析构函数?

c++ - 类中的静态模板函数

mysql - MySql 函数无法编译,我找不到原因

c++ - 带有自定义分配器的 Boost.Function

c++ - Boost套接字读取功能不起作用

c++ - 多个包括带有变量定义的头文件