当前位置: 首页 > news >正文

C++类和对象(七)const成员 及其初始化列表

1.const成员 

        将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。

        成员函数定义的原则:

        1.能定义成const的成员函数都应该定义成const,这样const对象(调用属于权限平移)和非const对象(调用属于权限缩小)都可以调用。

        2.要修改成员变量的成员函数,不能定义成const(如赋值运算符重载中的 + ,+= ,- ,-=) ,const对象不能调用,非const 才能调用。

2.取地址及const取地址操作符重载

        这两个默认成员函数一般不用重新定义 ,编译器默认会生成。

class Date
{public :
Date* operator&()
{
return this ;
}const Date* operator&()const
{
return this ;
}private :
int _year ; // 年
int _month ; // 月
int _day ; // 日
};

        这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比如想让别人获取到指定的地址!

        3. 构造函数体赋值

        在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。

class Date
{
public:
Date(int year, int month, int day)
{_year = year;_month = month;_day = day;
}
private:
int _year;
int _month;
int _day;
};

        虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化因为初始化只能初始化一次,而构造函数体内可以多次赋值。

       4 初始化列表

        初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表每个"成员变量"后面跟一个放在括号中的初始值或表达式。

class Date
{
public:Date(int year, int month, int day)
: _year(year), _month(month), _day(day)
{}private:
int _year;
int _month;
int _day;
};

【注意】

        1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
        2. 类中包含以下成员,必须放在初始化列表位置进行初始化:

                引用成员变量

                const成员变量

                自定义类型成员(且该类没有默认构造函数时)

        3. 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。

        4. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关

相关文章:

  • Pytorch图像模型转ONNX后出现色偏问题
  • Visual Studio 2010 软件安装教程(附下载链接)——计算机二级专用编程软件
  • 虽然许多人表示对Windows 11的透明任务栏不满,但有时效果还是挺好的
  • uni-app小程序使用vant
  • 虚拟机VirtualBox添加磁盘
  • React——简便获取经纬度信息
  • 家庭私人影院 - Windows搭建Emby媒体库服务器并远程访问 「无公网IP」
  • 不必安装,快速设计数据库表结构
  • 【gpt redis】原理篇
  • 蓝桥杯官网填空题(含2天数)
  • Java程序设计2023-第三次上机练习
  • pytorch复现_conv2d
  • 读程序员的制胜技笔记04_有用的反模式(下)
  • 【重磅】Cookies、headers、Session规律总结,搞定卡点
  • 2023.11.4 Idea 配置国内 Maven 源
  • JavaScript-如何实现克隆(clone)函数
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • ComponentOne 2017 V2版本正式发布
  • CSS盒模型深入
  • Django 博客开发教程 8 - 博客文章详情页
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java小白进阶笔记(3)-初级面向对象
  • JS数组方法汇总
  • leetcode386. Lexicographical Numbers
  • MySQL的数据类型
  • react 代码优化(一) ——事件处理
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 从0到1:PostCSS 插件开发最佳实践
  • 缓存与缓冲
  • 简单易用的leetcode开发测试工具(npm)
  • 前端代码风格自动化系列(二)之Commitlint
  • 思否第一天
  • 7行Python代码的人脸识别
  • gunicorn工作原理
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • #ifdef 的技巧用法
  • #Z2294. 打印树的直径
  • (1)STL算法之遍历容器
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (C语言)逆序输出字符串
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (南京观海微电子)——I3C协议介绍
  • (转)C#调用WebService 基础
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET MVC之AOP
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET中winform传递参数至Url并获得返回值或文件
  • 。Net下Windows服务程序开发疑惑
  • ::
  • @Autowired和@Resource装配
  • @DependsOn:解析 Spring 中的依赖关系之艺术