C++类 const成员变量和const成员函数

1. const成员变量

  • 在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定;
  • 初始化 const 成员变量只有一种方法,就是构造函数初始化列表

2. const成员函数

2.1. 首先复习一下指针和const

  • 一个指向常量的指针(底层const)不能改变所指对象的值;
  • 因此将一个普通指针(不是指向常量的指针)指向一个常量是错误的,因为只能使用指向常量的指针来存放常量的地址:
const double pi = 3.14;
double *ptr = &pi //错误,ptr是一个普通指针,不能存放常量对象的地址
  • 但是,指向常量的指针没有规定所指的对象一定是常量,只是规定不能通过该指针改变所指对象的值:
double pi=3.14;
const double *ptr = π//正确,指向常量的指针可以指向一个非常量,但是不能通过该指针改变所指对象的值

总结来说:指向常量的指针可以指向一个非常量,但是,普通指针不能指向一个常量

2.2 类成员函数的this形参

  • this是类中成员函数的一个隐式形参,this是一个指针,指向调用该成员函数的对象;
  • this默认是一个常量指针(顶层const),指向一个非常量,也就是说调用该成员函数的对象是一个非常量;

问题来了,如果调用该成员函数的对象是一个常量呢?

  • this是一个指向非常量的指针,也就是普通指针,根据前面所说,指向非常量的指针不能指向一个常量,因此,如果声明一个类对象为const对象,this指针就不能指向这个对象,这个对象也就不能调用这个成员函数;这也就是为什么我们说:常量对象不能调用非常量成员函数的原因

既然所有的成员函数的this指针都是普通指针,那怎么才能让一个const对象可以调用成员函数呢?

  • 那就声明this指针是一个指向常量的指针

因此,const成员函数“应运而生”!

  • 看一下const成员函数的声明格式
class Sales_data{
	// 数据成员
	std::string bookNo;
	// const成员函数
	std::string isbn() const {return bookNo;}
};
  • const的意思其实是声明this指针是一个const指针,也就是指向常量的指针,这样,一个const类对象也就可以调用该const成员函数了。

最后一个问题,为什么说非const对象也能调用const成员函数呢?

  • 第一部分也已经解释了,const成员函数中的this指针是指向常量的指针,但并不代表该指针指向的对象一定是常量,是个非常量对象也可以,因此非常量对象也能调用const成员函数;只是在const成员函数里,把这个非常量对象当成了“常量对象”来看待,并不会对其进行写操作。

2.3 const成员函数的用途

  • const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。一般来说,类中的get函数一般设置成const成员函数,来保护数据;
  • 对于const对象,只能调用const成员函数和const成员变量;
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值