C++技术——static、单例模型

一 static成员变量:

生命周期:从定义开始到进程结束,与类关联,独立于对象。

存储:静态局部变量,静态全局变量都存储在数据段

static修饰的成员变量---先于类的对象而存在(可以直接通过类名使用--前提成员是公有)

static修饰的成员变量--是被这个类的所有对象共用

static修饰的成员变量要在类外初始化  数据类型  类名::变量名 = 值

二 static成员函数:

static修饰成员函数----先于类的对象而存在(可以直接通过类名使用--前提成员是公有)

static修饰的成员函数---该方法没有this指针,在该函数中不能操作非static修饰的成员。

三 (好资料转载,关于static 修饰变量、函数具体知识点讲解)点击

四  单实例模式--使用静态成员变量+静态成员函数

/* 单实例模型实例:封装LCD设备,无论程序在那访问,
都是通过static LcdDevice* sharedLcdDevice() 来获取LCD,从而操作LCD。
*/
#include <iostream>
using namespace std;
class LcdDevice //LCD类
{	
public:
	static LcdDevice* sharedLcdDevice()//成员方法没有this指针
	{
		if(instance == NULL)//如果为空则调用构造函数,
		//通常整个进程生命周期,因为instance 是静态变量只调用一次。
		{
			instance = new LcdDevice();
		}
		return instance; 
	}

/*把构造函数和拷贝构造函数设置为私有,为了避免下面这两种可以成功调用
LcdDevice mylcd;(声明对象)     LcdDevice mylcd=*lcd;(拷贝对象)
我们希望整个程序调用LCD入口只有LcdDevice* lcd = LcdDevice::sharedLcdDevice():
这样保证了我们整个程序操作的是同一个LCD。
*/
private:   
	LcdDevice()
	{
		//初始化lcd--open, mmap
	}
	LcdDevice(LcdDevice& lcd){}
public:
	~LcdDevice()
	{
		//nmap,close
	}
	void draw_rect()//画矩形模块
	{
		cout<<"draw rect"<<endl;
	}

private:
	int fd;
	int width, height;
	unsigned int *mmp;
	static LcdDevice *instance;//数据段
};
//初始化
LcdDevice *LcdDevice::instance = NULL;//静态数据初始化----在数据段分配空间

void fun()//子函数想操作LCD,通过这样的方式,与main() 操作LCD 可以同步.
{
	//绘图
	LcdDevice* lcd = LcdDevice::sharedLcdDevice();
	lcd->draw_rect();
}

int main(void)
{

	LcdDevice *lcd = LcdDevice::sharedLcdDevice();
	lcd->draw_rect();
	fun();

	//LcdDevice mylcd; 该方式不合适。
	//LcdDevice mylcd=*lcd;该方式不合理
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值