你可以使用没有::?的名称空间引用其他类的函数吗?

时间:2014-12-31 12:05:31

标签: c++

你也可以吗?例如,您可以使用std::cout << "Message";在屏幕上打印一行,但如果您将using namespace std;添加到代码顶部,则可以在不使用std::的情况下使用它,只需使用它即可作为cout << "Message";

你能用你自己的代码做到吗?

编辑:让我解释一下。

假设我有A级:

//Class A
#include <iostream>
#include "A.h"
using namespace std;
class A {
public: void testFunction() {
cout << "My message";
}
};

然后,如果我正确设置了标题,我就能做到:

//Class B
#include <iostream>
#include "A.h"
using namespace std;

class B {
int main() {
A aObject; //Create the object
aObject.testFunction(); //This is how I'd have to reference it
return 0;
}
};

所以我想知道的是,即使它是在一个单独的类中,如何仅使用testFunction()而不是aObject.testFunction()来引用该函数

3 个答案:

答案 0 :(得分:1)

只能在该类的对象上调用类的非静态成员函数。这就是它们的用途。您不必拥有命名对象,但仍需要一个对象:

A().testFunction();

如果您创建函数static,那么您可以这样调用它:

A::testFunction();

谈论以任何其他方式调用该函数没有任何意义。这是成员函数的工作方式。听起来你真的想要一个非成员函数,可能在命名空间中。

答案 1 :(得分:0)

这是tutorialspoint的一个例子:

#include <iostream>
using namespace std;

// first name space
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// second name space
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
using namespace first_space;
int main ()
{

   // This calls function from first name space.
   func();

   return 0;
}

希望这有帮助。

也许这会更加明确:

#include <iostream>
using namespace std;

// first name space
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
   // second name space
   namespace second_space{
      void func(){
         cout << "Inside second_space" << endl;
      }
   }
}
using namespace first_space::second_space;
int main ()
{

   // This calls function from second name space.
   func();

   return 0;
}

答案 2 :(得分:0)

如果你想只通过它的名字来调用一个方法(比如在A类中),那么当一个方法具有相同的名称,参数,返回类型在另一个类(比如B类)时,它也会产生歧义在标题中。