我是靠谱客的博主 畅快钢笔,最近开发中收集的这篇文章主要介绍C++类 const成员变量和const成员函数1. const成员变量2. 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成员变量;

最后

以上就是畅快钢笔为你收集整理的C++类 const成员变量和const成员函数1. const成员变量2. const成员函数的全部内容,希望文章能够帮你解决C++类 const成员变量和const成员函数1. const成员变量2. const成员函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部