C++ C+;中的void function()和void ClassName::function()有什么区别+;?

C++ C+;中的void function()和void ClassName::function()有什么区别+;?,c++,function,C++,Function,他们之间有什么区别?它们都是每个对象一个吗?(初学者问题)可以在没有任何特定类实例的情况下调用void函数。。。i、 打电话给 function() 对于ClassName::function()您需要在类型为ClassName的特定对象上调用它: ClassName my_class; my_class.function(); 调用时,ClassName::function()将有一个隐藏的隐式函数参数this,可在函数体内部使用。它是指向调用了ClassName::function的Cl

他们之间有什么区别?它们都是每个对象一个吗?(初学者问题)

可以在没有任何特定类实例的情况下调用void函数。。。i、 打电话给

function()
对于
ClassName::function()
您需要在类型为
ClassName
的特定对象上调用它:

ClassName my_class;
my_class.function();
调用时,
ClassName::function()
将有一个隐藏的隐式函数参数
this
,可在函数体内部使用。它是指向调用了
ClassName::function
ClassName
对象的指针。您还可以访问其他类成员


另一个相关的区别是,您可以获取指向
function()
的指针并随时调用它,而当您获取指向
ClassName::function()的成员函数的指针时
在运行函数时,您还需要一个特定的
类名
对象。

可以在没有任何特定类实例的情况下调用void函数。。。i、 打电话给

function()
对于
ClassName::function()
您需要在类型为
ClassName
的特定对象上调用它:

ClassName my_class;
my_class.function();
调用时,
ClassName::function()
将有一个隐藏的隐式函数参数
this
,可在函数体内部使用。它是指向调用了
ClassName::function
ClassName
对象的指针。您还可以访问其他类成员


另一个相关的区别是,您可以获取指向
function()
的指针并随时调用它,而当您获取指向
ClassName::function()的成员函数的指针时
在运行函数时,您还需要一个特定的
类名
对象。

可以在没有对象的任何位置调用命名空间作用域函数:

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
}

命名空间作用域函数可以在没有对象的任何位置调用:

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
}
是对类内函数的调用成员函数。应该使用类的对象调用。而

void function() 
只是一个函数,可以在没有对象的情况下调用

是对类内函数的调用成员函数。应该使用类的对象调用。而

void function() 

只是一个函数,可以在没有对象的情况下调用。

要附加到该函数的任何特定上下文?您的意思是出现在类声明中还是出现在类命名空间之外?(我希望后者是显而易见的)。你想附加什么特殊的上下文?您的意思是出现在类声明中还是出现在类命名空间之外?(我希望后者是显而易见的)。静态成员函数与自由函数非常相似。。。。但有时有一个非常方便的好处,即访问类私有成员(函数和变量),而不需要交友。(+1 btw)静态成员函数与自由函数非常相似。。。。但有时有一个非常方便的好处,即访问类私有成员(函数和变量),而不需要交友。(+1 btw)