【C++】常量

目录

常量的初始化

常量引用

常量成员初始化

常量成员函数

常量对象


常量的初始化

常量必须在定义的时候进行初始化

const int b;//error 常量必须要在定义的时候初始化
const int a = 123;

常量引用

const 声明的引用可以被任意同类型int,string...所赋值初始化,初始化后的常量引用不能再被修改

const int a = 10;
const int &aa = a;
aa = 123;//erro const int 不能修改数值

常量成员初始化

型的成员除在定义的时候初始化外,必须在构造函数以列表形式初始化

class Test
{
public:
	//1. 初始化列表跟变量声明的顺序无关
	//2. 任何常量类型的成员必须在所有的构造函数中进行初始化

	Test(int a, int b,int c,int* ptr,const int* const pptr):S(c),_b(b),_a(a),pS(ptr),ppS(pptr)
	{
		//pS = ptr;//必须是可修改的左值
		cout << "构造函数执行" << endl;
	}

	Test(int a):S(a),pS(nullptr),ppS(nullptr)
	{

	}

public:
	int _a;
	int _b;
	const int S;
	int* const pS;
	const int* const ppS;

};

常量成员函数

常量成员函数主要约束函数内部对成员变量的修改,具有保护作用

float Player::GetATK() const {

	playerProperty.Combo.ATK = 12;//error : 不能修改的左值;playerProperty是类内部的成员		变量
	float atk = playerProperty.Combo.ATK + GetEquipATK();
	return atk;
}

带有返回引用类型的常量成员函数

//错误!常量成员函数不能返回带有引用的返回值,需要加修饰
Entity& GetEntity() const
{
	return new_et;
}
//const成员函数返回的引用必须是常量引用,常量引用的作用是不创建副本,但外部也不可以做任何修改
Entity const& GetEntity() const
{
	return new_et;
}

返回指针类型的常量成员函数

//可以修改指针所指的成员,但不能修改指针本身
Entity* Get() const
{
    //height = 123;//error
    ptrET->name = "123";
    return ptrET;
}

int height;
Entity new_et;

常量返回引用类型函数与普通函数区别

class Enemy
{
public:
	Enemy()
	{
		Atk = 100;
		Def = 200;
	}

	int Atk;
	int Def;
};

class Test
{
public:

	Test(int num):a(num)
	{
	}
	const int a;

	//不能修改返回值以及返回对象的内部成员
	Enemy const& GetEnemy() const
	{
		return enemy;
	}

	//可以修改返回值,不能修改内部成员
	Enemy GetEnemy2()const
	{
		return enemy;
	}

	//可以修改返回值和内部成员
	Enemy& GetEnemy3()
	{
		return enemy;
	}

	Enemy enemy;
};


int main()
{
	Enemy en2;
	Test t(100);
	cout<<t.GetEnemy().Atk<<endl;
	//t.GetEnemy().Atk = 500;//erro:表达式必须是可以修改的左值
	//t.GetEnemy() = en2;//不能修改一个const Enemy


	//t.GetEnemy2().Atk = 500;//erro:表达式必须是可以修改的左值

	//可以直接修改Enemy对象,但不支持修改内部成员

	t.GetEnemy2() = en2;

	//可以直接修改Enemy对象,也支持修改内部成员
	t.GetEnemy3().Atk = 500;
	t.GetEnemy3() = en2;

	system("pause");
	return 0;
}

常量对象

常量对象只能访问常量成员和常量成员函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值