我有一个由第三方编写的课程,它有类似这样的Foo.h:
class Foo
{
public:
int Foo::dosomething(float x, float y, float z);
//Other things here
};
Run Code Online (Sandbox Code Playgroud)
在Foo.cpp中,dosomething是:
int Foo::dosomething(float x, float y, float z)
{
//Something
}
Run Code Online (Sandbox Code Playgroud)
什么是::标头中的函数名前是什么意思?当我创建一个新对象
Foo foo;
Run Code Online (Sandbox Code Playgroud)
我不能像这样访问dosomething函数:
foo.dosomething(1,2,3);
Run Code Online (Sandbox Code Playgroud)
dosomething是如何被访问的?当我在dosomething之前删除头文件中的::时:
class Foo
{
public:
int dosomething(float x, float y, float z);
//Other things here
};
Run Code Online (Sandbox Code Playgroud)
我可以从类型为Foo的对象访问dosomething.
这是不正确的(和许多编译器认为这是一种错误)的范围内添加到函数名称中的类定义.由于它已经在类的范围内,因此您实际上是将函数作用域定义Foo::Foo::dosomething为错误.
class Foo
{
public:
int Foo::dosomething(float x, float y, float z); // Shouldn't have Foo::
};
Run Code Online (Sandbox Code Playgroud)
要回答你的问题::,它指定了函数的范围.考虑这两个功能
int dosomething(float x, float y, float z);
int Foo::dosomething(float x, float y, float z);
Run Code Online (Sandbox Code Playgroud)
第一个是自由函数,后者是Foo类的一个方法,并且(因为它之前没有单词static)需要一个Foo要调用的实例.
| 归档时间: |
|
| 查看次数: |
669 次 |
| 最近记录: |