静态成员变量,静态成员函数,单例模式
静态成员变量
class A{
public:
static int count; //静态成员变量
static void get(){}; //静态成员函数
}
int A::count=5; static成员变量是类级变量(用来处理这中类型的对象,共享的数据,属于整个类型,内存中只有一份)。和全局变量以及静态局部变量一样,存放在进程的静态存储区(数据区+BSS区)。静态成员变量必须在类外进行初始化, 不能在构造函数中初始化
静态成员变量类型 类型::静态成员变量名; //基本类型初始化为零 类类型调用无参构造 静态成员变量类型 类名::静态成员变量名=值; 静态成员变量类型 类名::静态成员变量名(值);
例子
#include<iostream>
using namespace std;
class Person{
string name;
int age;
static int pcount; //静态成员变量是类型级的变量
public:
Person(string name="",int age=1){
this->name=name;
this->age=age;
cout<<name<<" is coming"<<endl;
pcount++;
}
void show(){
cout<<"I am "<<name<<",age:"<<age<<endl;
cout<<"current pcout:"<<pcount<<endl;
}
~Person(){
pcount--;
cout<<"after "<< name <<" leave,"<<"Current pcount: "<<pcount<<endl;
}
};
int Person::pcount;
void foo(){
Person persona("PuJing",50);
persona.show();
Person personb("AoBaMa",45);
personb.show();
}
int main(){
foo(); //这句执行完里面的对象就被自动析构了
Person personc("XiJinPing",55);
personc.show();
return 0;
} 静态成员函数
只能访问该类的静态成员
class A{
public:
static int count; //静态成员变量
static void get(){}; //静态成员函数
}
int A::count=5; - Static Member Function没有this指针,只能访问该类Static Member Variable,不能访问普通成员变量。
- NonStatic Member Function非静态成员函数都可以访问。
单例模式
Singleton使用私有构造函数的方法禁止在类外部创建实例,而类自己使用静态成员变量的方法来维护其唯一实例,并提供访问该实例的方法。
饿汉式
饿汉式单例模式的优点是加载进程时静态创建单例对象,线程安全;缺点是无论使用与否,总要创建一个实例。
//饿汉式,程序一启动就创建好了对象
class Singleton{
Singleton(){} //构造函数私有化, 保证不能从外部创建对象
static Singleton sig; //static的成员变量, 在进程加载的时候就创建好对象,线程安全
public:
static Singleton& getInstance(){ //得到对象的接口, 也是static的, 用来返回唯一的一份sig
return sig;
}
};
Singleton Singleton::sig; 懒汉式
懒汉式单例模式的优点是用则创建,不用不创建,什么时候用什么时候创建;缺点是首次访问时动态创建单例对象,在多线程应用中,存在线程不安全的问题。
//懒汉式,需要时候才创建对象
class Singleton{
Singleton(){} //构造函数私有化
static Singleton* instance;
public:
static Singleton getInstance(){
if(instance==NULL)
instance=new Singleton();
return instance
};
}
Singleton* Singleton::instance=NULL;int main(){
Singleton& siga=Singleton::getInstance(); //得到已经在内存中的sig
Singleton& sigb=Singleton::getInstance();
cout<<&siga<<":"<<&sigb<<endl; //这两个的地址时一样的, 因为是同一个对象
return 0;
} 相关推荐
wbczyh 2020-07-05
hhxywlzx 2020-04-14
wolaoreme 2011-05-13
huangjing0 2018-07-25
DreamSnow 2010-02-04
雨云轩 2010-01-21
不知鲸又是鱼 2010-01-20
zgzczzw 2019-04-25
dannistang 2014-09-28
zhangwei0php 2017-10-26
phptyong 2017-02-14
PHP100 2019-03-27
编程10000问 2019-03-27
编程10000问 2019-03-26
学习编程 2018-01-29
学习编程 2018-01-23