C++类的常数据成员和常成员函数
一、常数据成员
1、定义
用const修饰的数据成员
const int hour;//定义const为常数据成员
2、初始化
不能采用在构造函数中对常数据成员进行赋初值的方法,因为常数据成员是不能被赋值的。
构造函数只能用参数初始化列表对常数据成员进行初始化
Time ::Time (int h):hour(h){}//通过参数初始化表对常数据成员进行初始化
3、访问规则
- 普通成员函数可以引用常数据成员,但是不能修改其值
- 常成员函数可以引用常数据成员,但是不能修改其值
二、常成员函数
1、定义
常成员函数是指由const修饰符修饰的成员函数
void getTime() const;//在声明和定义常成员函数时都要有const关键字,在调用时不必加
2、访问规则
- const对象只能调用const成员函数
- const成员函数可以引用常数据成员和普通数据成员,但是不能修改其值
- const成员函数只能调用const成员函数,不能调用普通成员函数
- 普通对象可以调用const成员函数
3、本质
常成员函数的const实际上修饰的是this指针使之成为常this指针
void getTime(const Time *const this)
普通成员函数编译完是
void getTime(Time *const this)
4、注意
- 普通的成员函数和常成员函数互为重载
- 任何不修改成员数据的函数都应该声明为const函数,这样有助于提高程序的可读性和可靠性
- const成员函数表示该成员函数只能读类数据成员,而不能修改类成员数据。定义const成员函数时,把const关键字放在函数的参数表和函数体之间。有人可能会问:
为什么不将const放在函数声明前呢?因为这样做意味着函数的返回值是常量,意义完全不同。
C++类的常数据成员和常成员函数相关推荐
- 常对象、常数据成员、常成员函数
C++有不少措施保护数据的安全性,如private保护类的数据成员等. 但对于一些共用的数据,如函数实参与形参等,我们可以在不同的场合通过不同的途径访问同一个数据对象.有时不经意的误操作会改变数据的值 ...
- 【C++】 常对象、常数据成员、常成员函数总结
常数据成员 ◆ 常数据成员必须进行初始化,并且不能被更新. ◆ 常数据成员不能在声明时赋初始值(普通数据成员也是),常数据成员必须在构造函数初始化列表进行初始化:普通数据成员在初始化列表和函数体中 ...
- 常对象成员和常成员函数
-----------------siwuxie095 常对象成员 和 常成员函数 看如下实例: 定义一个坐标类:Coordinate 要想正确的初始化,必须通过初始化列表来初始化,因为两个数据成员 ...
- C++ 类与对象_类的其他成员(常成员,静态成员,友元)
系列文章目录 重新复习c++,所以把书中的重点内容整理成博客,尽量简洁,易懂. C++ 类与对象_类和对象的定义与访问 (定义类和对象,访问对象成员,this指针) C++ 类与对象_构造函数和析构函 ...
- C++ 常数据成员、常成员函数和常对象
首先给出一个例子简单理解const修饰数据变量的基本工作原理: #include <stdio.h>int main() {const int a = 250;int *ptr = (in ...
- 常数据成员、常成员函数
定义常数据成员: 类型 const 对象名:或者 const 类型 对象名: 例如:const clock c1(9,9,9)或者: clock const c2(10,10,10): 常对象的几条特 ...
- 常数据成员和常成员函数
常数据成员 引言:类存在的目的之一就是为了实现封装性,但是实际上经常使用公有函数接口去修改其数据成员,为了保证类中可以有一些数据成员绝对不会被修改,所以创造了常数据成员 特点: 1.在定义时要在头部加 ...
- 常数据成员、常成员函数、常对象
常数据成员 常数据成员的初始化只能在类构造函数的初始化表中 MINO::MINO(const char *name, int age, string birth, int height, int we ...
- 常对象、常数据成员、常成员函数总结
# include <iostream> using namespace std;class Time {public:Time(int h = 10, int m = 30, int s ...
- C++常数据成员,常成员函数及常对象的使用
一.常数据成员不可修改,声明方式:const [类型][标识符] 二.常成员函数可以和同名的非常成员函数发生重载,且声明和定义时都要带上const,调用时不需要,声明方式:[类型][函数名](参数列表 ...
最新文章
- H5前端框架推荐合集 (转)
- Java毕设动物管理系统_java毕业设计_springboot框架的现代化动物园管理系统EB
- 产品认知:产品经理需要具备哪些核心竞争力?
- 中兴f650是千兆的吗_装宽带送的光猫自带WiFi功能,我还需要买路由器吗?
- 计算数字的位数并逆序输出
- 树状结构大数据类型的高效支持
- 辗转相除法(欧几里得算法)求解最大公约数、最小公倍数
- Java 基础整理(一)
- java解决斐波那契数列(Fibonacci sequence)
- cisco 基础配置命令中文解析 1
- 关于MongoDB时区问题
- 手写一些js方法收集:
- HDU1215 七夕节(模拟 数学)
- 太卷了,这篇 CPU Cache,估计没人看
- 令牌环算法_一环(令牌)将它们全部统治
- ApiPost使用教程
- 有道云笔记·协作android版,【每天一品】有道云笔记协作
- Transaction-based classification and detection approach for Ethereum smart contract
- [魔改整合] [Mod整合包] [1.12.2][Mod整合包]幸运贪婪超级整合-超多好玩的mod
- 爪哇国新游记之八----读写文件及数组排序
热门文章
- 操作系统锁的实现方法有哪几种_深入理解多线程(四)—— Moniter的实现原理
- 迅捷PDF转Word转换器
- guava深入理解(3)-字符串,实用方法,函数式编程
- 使用jquery.lazyload.js图片预加载(懒加载)遇到的问题,图片加载不出来
- 短网址还原 php,php简单实现短网址(短链)还原的方法(测试可用),php还原_PHP教程...
- IDV VDI TCI RDS区别
- edg击败we视频_lpl2018春季赛2月4日WEvsEDG比赛视频:EDG2:1击败WE
- svchost.exe占网速解决方法
- katacontainers二进制安装
- 使用Intellij来实践测试驱动开发 TDD Kata