静态成员函数不会隐式传入this,所以静态成员函数不能访问类的非静态成员。在单例模式中,我们发现利用静态成员函数调用中实例化了一个所属类的对象,且该类的构造函数为私有函数。 注意有个错误的说法:静态成员函数只可以访问静态成员变量/静态成员函数不能访问非静态成员。静态函数没有默认的this对象指针。但是可以通过...
编译器也会定义默认的拷贝构造 int m_data; static A s_instance;//声明静态单例 public: static A& getInstance(void){//定义单例的接口 return s_instance; } }; A A::s_instance(1234);//在外部初始化单例 int main(void){ A a;//error A* p =new A;//error A...
类外代码可以(但非必须)使用类名和作用域操作符来调用静态成员函数;静态成员函数只能引用属于该类的静态数据成员或静态成员函数。 关于这个静态数据成员呢,我们以后在处理和使用“单例模式”的时候会经常用到,但是我们今天不是要讲单例模式,我们就是感受一下静态数据成员和静态成员函数的使用方法。 下面我们写一个具...
这样我们就直接能通过类名去访问静态成员函数,获取对象个数,不通过任何对象。 静态成员函数在C++中的作用很强大,包括后边的介绍的单例模式、二阶构造模式,都用到静态成员函数及静态成员变量。 下边的图为静态成员函数与普通成员函数的比较
//2)使用静态成员变量表示单例对象 static Singleton s_instance; }; Singleton Singleton::s_instance = 1234; int main(void) { cout << "main函数开始执行" << endl; //Singleton s(123);//error //Singleton* ps = new Singleton(123);
– 单例模式:静态成员函数在实现单例模式中非常常用。通过将构造函数设置为私有,并在类中声明一个静态成员函数来获取唯一的实例。 – 工具类:某些类中的方法可能与类的状态无关,例如数学函数,字符串处理函数等。这些方法可以声明为静态成员函数,方便直接调用。
可以用于实现类的单例模式。 可以用于在类外部实现与类相关的全局功能,但希望将这些功能封装在类的命名空间中。 C++静态函数成员的声明和定义方式 声明:在类内部使用static关键字声明静态成员函数。 定义:在类外部定义静态成员函数时,不需要使用类对象或类类型来限定函数名,但需要使用类名和作用域解析运算符::来指...
类 构造函数 构造函数 className 或 className.identifier, 关键字 new 可选. 构造函数语句执行顺序:...
当static出现在类的定义中便出现了静态成员变量和静态成员函数。静态成员是属于类的,而不是属于某个对象的。即便没有任何一个实例,类的静态成员变量也已经存在了,而且还可能通过“类名::成员名”进行访问。类的静态成员函数也可以用相同的方式调用,在类产生实例之前就调用成员方法,典型应用是实现单例模式。
在头文件中声明一个类,定义一个指向该类本身的静态成员指针变量,实现单例模式 classTest{public: ~Test();staticTest*Instance(); private: Test();staticTest* m_pTest;boolm_bStatus;std::stringm_strValue; }; 注意static成员一定要在类外初始化 ...