参考文章:《Linux高性能服务器编程》游双
我们知道,类的静态成员函数只能访问类的静态数据成员和类的其他静态函数,eg:
#include<iostream>
using namespace std;
class A
{
public:
static void func1()
{
func2();
//func3(); //会报错
}
static void func2()
{
cout<<"I'm in func2.\n";
}
void func3()
{
cout<<"I'm in func3.\n";
}
};
int main()
{
A a;
a.func1();
return 0;
}
如果我们要
在类的静态成员函数中使用类的非静态成员函数和非静态数据成员
时,可以通过下面两种方法:
1、通过类的静态对象来调用。eg:
#include<iostream>
using namespace std;
class A
{
public:
A(){
instance = this;
}
static void func1()
{
instance->func2();
//func2(); //出错,static 成员函数不能调用非 static 成员函数
//this->func2(); //出错,this 不能在静态成员函数中使用
}
void func2()
{
cout<<"I'm in func2.\n";
}
private:
static A* instance;
};
A* A::instance = NULL;
int main()
{
A a;
a.func1();
return 0;
}
2、将类的对象作为参数传递给该静态成员函数。eg:
#include<iostream>
using namespace std;
class A
{
public:
void func()
{
func1(*this);
}
static void func1(A a)
{
a.func2();
//func2(); //出错
}
void func2()
{
cout<<"I'm in func2.\n";
}
};
int main()
{
A a;
a.func();
return 0;
}
版权声明:本文为qq_34706871原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。