const关键字

const 引用

const关键字修饰的引用,称之为对常量的引用,简称为常量引用。
与普通引用不同的是,对常量的引用不能被作为修改它所绑定的对象。
如:const int ci =1024;
const int&r1 = ci;
const int&r1 = 20;
常量饮用仅对引用 可参与的操作做出了限定,对于引用的对象本身是不是一个常量 未做限定,即const引用即可绑定到常量对象上,也可绑定到非常量对象上。
尽可能在参数传递运用const引用。
1.vi main.cpp

#include"Object.h"

void func(const Object& obj)//const即可绑定const,也可绑定不带const的参数
{

}

int main(int argc,char **argv)
{
	const Object obj;
	func(obj);
	return 0;
}

const成员函数

当成员函数不会更改对象的任何成员变量,可以将成员函数声明为const:
class 类名
{
pulic:
返回类型 函数名(参数列表)const;
}
返回类型 类名::函数名(参数列表)const
{//函数体}

const 修饰的对象和普通对象 不同,const只能调用const修饰的成员函数,而普通对象可以调用任何成员函数。
const修饰成员函数的目的,是为了确认该成员函数能被const对象调用。
1.vi Object.h

#ifndef  _OBJECT_H
#define _OBJECT_H

class Object
{
private:
	int num;
public:
	int getNum()const;//
	void setNum(int num);
	Object(int num);

	Object();//构造函数
	~Object();//析构函数

}

#endif

2.vi Object.cpp

#include"Object.h"
#include<iostream>
using namespace std;

Object::Object(int num)
	:num(num)//把形参num赋值给成员num
{

}

Object::Object()
{
	cout<<"Object::Object()"<<endl;
}

Object::~Object()
{
	cout<<"Object::~Object()"<<endl;
}

int Object::getNum()const
{
	return num;//把object对象里面的num获取出来
}

void Object::setNum(int num)
{
	this->num = num;//参数修改对象里面的num的值
}
  1. vi main.cpp
#include"Object.h"
#include<iostream>
using namespace std;

int main(int argc,char **argv)
{
	const Object obj(0);//如果Object.h中int getNum()后面不加const,则不能调用getNum
	//Object obj(0);//这样也可以调用getNum,因为Object.h中intgetNum()后面加了const
	Object obj(0);
	cout<<obj.getNum()<<endl;
	 
	 return 0;
}

const_cast

对于将常量对象转换成非常量对象的行为,一般称为“去掉const性质”。一旦去掉了某个对象的const性质,编译器就不再不再阻止我们对该对象进行写操作了。
如果对象本身不是一个常量,使用强制类型转换获得写权限是合法的行为。然而如果对象是一个常量,再使用const_cast执行写操作就会产生未定义的后果。
const_cast使用方法:const char *pc
char *p = const_cast<char *>(pc);
char &r = const_cast<char&>(*pc);

#include<iostream>
using namespace std;

int main(int argc,char **argv)
{
	char c = 'z';
	const char* pc = &c;

	char *p = const_cast<char*>(pc);
	char  &rc = const_cast<char&>(*pc);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值