先上一段代码
class A
{
public:
static A& get_instance()
{
static A static_obj;
return static_obj;
}
private:
A()
{
private_value = 0;
}
int private_value;
};
这是单例模式的一种实现
构造函数是private的,这样做的原因是:不想在类外实例化对象
但是get_instance()是static的,按照一般人的理解来说,静态成员函数是不能访问非静态成员的,所以get_instance()应该是不能访问构造函数的,那这是怎么回事?
再看如下代码
#include <iostream>
using namespace std;
class B
{
public:
static int add()
{
B b;
return b.public_value + b.private_value;
}
B()
{
public_value = 0;
private_value = 0;
}
int public_value;
private:
int private_value;
};
int main()
{
cout << B::add() << endl;
return 0;
}
结果打印:0
结果说明:类的static函数,可以通过对象访问非static的public成员,然后因为类的static函数属于这个类,所以还可以直接通过对象访问非static的private成员