他们之间有什么区别?它们都是一个对象吗? (初学者问题)
答案 0 :(得分:3)
可以在没有任何特定类的实例的情况下调用void函数...即只调用...
function()
对于ClassName::function()
,您需要在ClassName
类型的特定对象上调用它:
ClassName my_class;
my_class.function();
调用时,ClassName::function()
将有一个隐藏的隐式函数参数this
,可以在函数体内使用。它是指向已调用ClassName
的{{1}}对象的指针。您还可以访问其他班级成员。
另一个相关的区别是,您可以指向ClassName::function
并随时调用它,而当您将指针指向成员函数转移到function()
时,您也会在您想要运行该函数时需要一个特定的ClassName::function()
对象。
答案 1 :(得分:3)
可以从没有对象的任何地方调用命名空间作用域函数:
int foo();
void bar() {
int x = foo();
}
成员对象需要调用一个实例,该实例隐含在另一个成员函数的上下文中:
struct B {
int foo();
int fred() {
if (true) {
return foo(); // OK, local object implied
}
return n; // member function can also access member variables
}
static int george(); // static members can be called without instances!
int n;
};
void baz() {
B b;
int x = B::george(); // static class members don't need instances.
int y = b.foo(); // member function on object OK
//int z = foo(); // XXX: this wouldn't compile
}
答案 2 :(得分:0)
void ClassName::function()
调用类中的函数。 会员功能。并且应该通过使用您的类的对象来调用。同时,
void function()
只是一个函数,可以在没有对象的情况下调用。