[英]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.