【C++】 常对象、常数据成员、常成员函数总结
常数据成员
◆ 常数据成员必须进行初始化,并且不能被更新。
◆ 常数据成员不能在声明时赋初始值(普通数据成员也是),常数据成员必须在构造函数初始化列表进行初始化;普通数据成员在初始化列表和函数体中初始化均可。
◆ PS:类的成员对象若要传入参数初始化,则必须在构造函数初始化列表进行;(成员对象:当一个类的成员是另一个类的对象时,这个对象就叫成员对象。)
常对象
◆ ⭐常对象可以调用常成员函数,不能调用非const成员函数;非const对象,可以调用普通成员函数和常成员函数。
◆ 常对象的成员函数不一定都是常成员函数;同样的常对象的数据成员不一定都是常数据成员。
◆ 常对象一旦初始化,常对象的数据成员便不允许修改,而不是说常对象的数据成员都是常数据成员。
◆ PS:定义常对象有两种方法,1. Point const a; 2. const Point a;(同样的,定义变量或指针时,const放前放后意义一样,如:1. const double a; double const a; 2. const int *p; int const *p; 但是定义指针常量时,只能用 int * const p;)
常成员函数
◆ 常成员函数不更新对象的数据成员。
◆ 常成员函数的const关键字可以被用于参与对重载函数的区分。
◆ ⭐通常非const成员函数需要定义一个const版本的重载函数,以方便定义常对象后调用常成员函数。
◈ 如果常对象调用的常成员函数返回的是指向当前对象的指针(或返回的是当前对象),那么此常成员函数的声明的返回类型要加const,例如:
◊ 成员函数返回指向当前对象的指针
const *Point fun1(); //非const成员函数的类内声明;
const *Point fun1() const; //习惯上要再声明一个常成员函数作重载函数,注意到此函数声明有两个const;
◊ 成员函数返回指向当前对象
const Point fun1(); //非const成员函数的类内声明;
const Point fun1() const; //习惯上要再声明一个常成员函数作重载函数,注意到此函数声明有两个const;
◊ ⭐注意,如果一个类中声明以下4个重载函数:
① Point fun1();
② const Point fun1();
③ Point fun1() const;
④ const Point fun1() const;
【解析】①和②是冲突的,因为无法区分仅按返回类型区分的重载函数;③和④是冲突的,也是因为无法区分仅按返回类型区分的重载函数。
所以正确的重载函数搭配有3种:
◊ ①和③搭配:
Point fun1(); //函数返回非const对象
Point fun1() const; //函数返回非const对象
[解析]适用于定义常对象后调用常成员函数,常成员函数返回类型是非const的Point类对象。
◊ ①和④搭配(这里把返回类型改为指针,因为常用):
Point *fun1() {return this; }; //函数返回指向本对象的指针
const Point *fun1() const { return this; };//函数返回指向本常对象的指针,第一个const说明返回的是指向常对象的指针,第二个const说明此函数是常函数
[解析]适用于定义常对象后调用常成员函数,常成员函数返回类型是常Point类对象(如return *this;)。
◊ ②和④搭配:
const Point fun1(); //函数返回常对象
const Point fun1() const; //函数返回常对象
[解析]适用于定义常对象后调用常成员函数,常成员函数返回类型是常Point类对象。
◊ ②和③搭配:
const Point fun1();
Point fun1() const;
[解析]虽然搭配合法,但是似乎不存在这种搭配。
【C++】 常对象、常数据成员、常成员函数总结相关推荐
- C++中的常引用、常对象、常函数、常数据成员
1.常引用 用const声明的引用就是常引用.常引用所引用的对象不能被更改.经常见到的是常引用作为函数的形参,这样不会发生对实参的误修改.常引用的声明形式为:const 类型说明符 &引用名. ...
- 常对象、常数据成员、常成员函数总结
# include <iostream> using namespace std;class Time {public:Time(int h = 10, int m = 30, int s ...
- 常引用、常对象和对象的常成员
常引用 用const声明的引用就是常引用.常引用所引用的对象不能被更改.我们经常见到的是常引用作为函数的形参,这样不会发生对实参的误修改. 常引用的声明形式为:const 类型说明符 &引用名 ...
- C++学习(六) 常引用、常对象、常对象成员、常成员函数
文章目录 1.常引用 1.1.作用 1.2.说明 二.常对象 2.1.作用 2.2.注意 2.3.说明 三.常对象成员 3.1.作用 3.2.说明 四.常成员函数 4.1.说明 4.2.注意 1.常引 ...
- C++常成员函数 常对象成员
什么是常对象成员,什么是常成员函数? 首先先看一段代码: class A { private:const int a; // 常对象成员,只能在初始化列表赋值public:// 构造函数A() { } ...
- 常对象与常函数(Const修饰的对象与成员函数)
常函数: 其定义与注意事项如下: 1.成员函数后加const后,我们称这个函数为常函数 2.常函数内不可修改成员属性 3.成员属性声明时加关键字mutable后,在常函数中依然 ...
- C++中常对象、常成员函数、常成员变量
用const修饰的类对象叫做常对象, 用const修饰的成员函数叫常成员函数, 用const修饰的成员变量叫常成员变量, 常对象: 型如: const <类名> <对象 ...
- 简单总结 常(常量/const)成员函数 and 常对象的使用
一.常(常量/const)成员函数 在函数定义式()后 + const 比如: class Rational { public://非常成员函数void func() { cout << ...
- [c++]常对象的特点
c++中为了保护对象的数据安全,可以采用常对象. 常对象特点: 1.常成员数据的值无法被修改. 2.常成员数据必须赋初值. 3.常成员函数只能引用本类的常数据成员,且不可改变成员的值. 4.常成员函数 ...
最新文章
- 白话Elasticsearch47-深入聚合数据分析之Cardinality Aggs-cardinality算法之优化内存开销以及HLL算法
- 提高 服务器 内存 利用率_怎样提高AI服务器的利用率
- USC提出拟牛顿法深度学习优化器Apollo,效果比肩SGD和Adam
- Linux平台 Oracle 18c RAC安装Part3:DB配置
- piovt table python_python – Pandas:pivot和pivot_table之间的区别...
- jdk12源代码文件_在JDK 11中启动单文件源代码程序
- 电路板上的插头怎么拔下来_空调维修排查电路板内外原因
- hnu 暑期实训之7还是7 to_string的实现方法
- 在lamp环境下搭建多种论坛(下)
- 计算机 项目管理 stage phase区别
- Android逆向分析实例(三)-解密微信EnMicroMsg.db数据库
- win10开机密码忘记怎么办|win10登陆密码忘记解决方法
- 认知空间是什么意思_什么是认知?
- 贴吧怎么发帖,发防删图出现审核怎么办?
- 如何查看网站是是什么服务器_什么是网站
- VMware Workstation Pro网络配置(WiFi配置等)
- SpringBoot系列课程(二)-SpringBoot整合MyBatis
- 微信开发者工具button,input鼠标点击坐标偏移
- 关于如何解释机器学习的一些方法
- ERROR 1370 (42000): execute command denied to user ‘james‘@‘localhost‘ for routine ‘test.coun_add‘
热门文章
- Unity中遇到,GUIText已弃用,解决办法
- mysql配置MHA集群
- 为什么使用fitz读取pdf转为图片模糊
- 赚钱必看:独立开发者必知的一些总结
- 关于SDL多指触屏事件获取各手指状态的问题。
- 哈工大计算机学科等级,计算机学科评估为A以上10所高校!北邮超过哈工、上交、南大等...
- 人工智能属于计算机学科研究中的什么方向,“人工智能”属于计算机学科研究方向中的...
- [转] iOS 常用数学函数
- 【Linux命令】《鸟哥Linux基础》第二十一章 软件安装:源代码与Tarball
- Spring Boot缓存管理