繁体   English   中英

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

[英]call function without object in c++

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

您可以在矢量类之外但在同一名称空间/文件中声明该函数,然后相应地对其进行定义。

例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM