我们已经知道,如果在类的声明中声明一个static成员函数,那么它将禁止使用this指针,并且仍然具有全局作用域。那么这种全局作用域的特性是否适合名称空间呢,我们知道类的性质和名称空间很相似。
实验0:使用名称空间:
//head.h
#include<iostream>
struct qiqi
{
int a;
int b;
};
namespace duidui
{
static void show(struct qiqi x);
static int back(int y);
}
//function.cpp
#include<iostream>
#include"head.h"
namespace duidui
{
void show(struct qiqi x)
{
std::cout << x.a << std::endl;
std::cout << x.b << std::endl;
}
int back(int m)
{
return m * 2;
}
}
//main
#include<iostream>
#include"head.h"//包含static函数的声明
int main(void)
{
struct qiqi mm = {12,13};
duidui::show(mm);//编译器提示错误:静态函数void duidui::show(qiqi)已声明,但未定义。
std::cout<<duidui::back(20);//编译器提示错误:静态函数int duidui::back(int)已声明,但未定义。
return 0;
}
实验1:使用类:
//head.h
#include<iostream>
struct qiqi
{
int a;
int b;
};
class duidui
{
private:
int ho;
public:
static void show(struct qiqi x);
static int back(int y);
};//仅仅改变了这里
//function.cpp
#include<iostream>
#include"head.h"
void duidui::show(struct qiqi x)
{
std::cout << x.a << std::endl;
std::cout << x.b << std::endl;
}
int duidui::back(int m)
{
return m * 2;
}
//main
#include<iostream>
#include"head.h"
int main(void)
{
struct qiqi mm = {12,13};
duidui::show(mm);
std::cout<<duidui::back(20);
return 0;
}//正确运行。
以上实验说明,类中的static成员函数与名称空间中的static函数作用域是不同的。类中的static成员函数具有全局作用域,而名称空间中的static函数仍然同C语言规定的一样,作用域为本文件内。