在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 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);
相关文章:
- 组件X86转换为ARM功能呼叫,其中有不同数量的参数为ARM
- 如何存储指针以功能模板,该模板将可呼叫对象作为其参数之一
- 错误:呼叫构造器的匹配函数无匹配功能
- 将功能存储在班级中,而无需呼叫开销
- 模板功能不使用RVALUE参考实例化/接收呼叫
- C 呼叫功能具有许多不同类型
- C 功能接受给定模板签名的任何可呼叫
- 呼叫功能时JNI C Android应用程序崩溃
- 错误 - 无需匹配功能,将类别为属性C 呼叫
- C 功能内容基于呼叫者
- glutkeyboardfunc呼叫功能不起作用
- 从DLL到EXE C 的呼叫功能
- 在静态库中的主呼叫功能
- 呼叫功能的值,该功能通过引用C 中的指针
- 呼叫功能时防止int施放
- 呼叫功能在if条件下的错误
- C 呼叫功能指针带有任何数量的变量
- C 中替代呼叫功能的意外歧义
- 在C 中没有对象的呼叫功能
- 没有匹配的呼叫功能,烦人的C++错误