【c++】类的特殊的成员(静态成员和常量成员)

特殊的成员:
1.const成员:
  1.const数据成员:
   特点:1.必须使用成员初始化列表初始化
      2.不能修改const成员的值
      [必须使用成员初始化列表初始化的:
        1.const数据成员
        2.指针常量(int* const p)
        3.引用(普通引用和常饮用都要)]
  2.const成员函数:
   特点:1.返回值类型 函数名(形参表)const;//声明和定义
     2.函数内的this指针变为常量指针;
      (指向的数据成员不能被修改,传进来的形参可以被修改)
     3.只能调用const修饰的成员函数;
    
2.static成员:
  1.static数据成员:(全局区)
   特点:
    1.被类的所有对象共享,内存只存在一份;(内存不计入类的内存)
      (A对象改变了静态变量的值,B访问时已经改变后的值)
    2.必须在类外初始化:(一般在同名的.cpp里)
      //类型 类名::变量名 = 初始值;//省略初始值默认为0
    3.访问方式:1.对象.成员
          2.类名::成员(推荐)
     4.static const成员不需要使用成员初始化列表初始化;
 
  2.static成员函数:(static写在声明中/定义里不用写)
    特点:
      1.访问方式:1.对象.函数名(实参表)
            2.类名::函数名(实参表)(推荐)
      2.函数内只能访问静态成员
----------------------------------
==单例模式:==只能创建一个对象,(例如游戏管理)
步骤:
 1.构造函数私有化:为了防止在类外创建对象
   (把构造函数写成 private)
 2.添加 静态函数:用来创建对象
    1.全局(static)
    2.堆区(new)
 3.定义静态指针 : 记录创建对象的地址(第二种)

第一种: 创建一个静态全局变量 然后返回引用
static GameManage& getInstance()
{
	static GameManage gameManage;
	return gameManage;
}
创建:
1.GameManage::getInstance().gameState = START;
2.GameManage& gameManage = GameManage::getInstance();
  gameManage.gameState = START;
第二种: 堆区:(new)
.h:
private:
	static SingleInstance* pInstance;//创建静态指针记录
public:
	static SingleInstance* getInstance();

.cpp:
初始化:SingleInstance* SingleInstance::pInstance = nullptr;
SingleInstance* SingleInstance::getInstance()
{
	//需要记录是否创建了对象:定义一个静态指针pInstance
	//判断pInstance是否为空,如果为空,创建一个对象
	//不为空返回地址
	if(nullptr == pInstance)
	{
		pInstance = new SingleInstance;//申请对象
	}
	return pInstance;
}
如果用new来创建对象,在析构函数中需要将静态指针置空,否则会造成野指针
SingleInstance::~SingleInstance()
{
	pInstance = nullptr;
}

----------------------------------
const的用法:
1.const修饰普通类型的变量,表示变量只读;
2.常量指针:表示指针指向一个被const修饰的变量,指向的内容不能修改;
3.指针常量:表示指针本身是一个被const修饰的变量,指向不能修改;
4.常引用:const修饰引用,表示不能通过引用改变被引用对象的值;
5.const数据成员;
6.const成员函数;

static用法:
1.static全局变量:
2.static局部变量:

注意:
1.所有在全局区的变量都会默认初始化为0;
2.写在函数内的静态变量只初始化一次;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值