在C ++中,void function()和void ClassName :: function()之间有什么区别?

时间:2014-05-21 01:42:28

标签: c++ function

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

3 个答案:

答案 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() 

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