【C++】初始化列表,explicit 关键字,静态成员

文章讨论了C++中的初始化列表在构造函数中的作用,特别是对于const成员、引用和自定义类型的重要性。explicit关键字用于防止隐式类型转换,而静态成员变量作为类共享的数据,需要单独初始化。静态成员函数和匿名对象的概念也被提及,以及友元如何提供对私有成员的访问,但应谨慎使用。最后,文章提到了友元函数在处理如<<运算符重载等特殊情况下的应用。

初始化列表

构造函数内可以对于成员的赋值,故不能称为是初始化,初始化只能初始化依次,C++中类对象的初始化可由初始化列表完成

  • 内置类型成员可以通过设置缺省值实现初始化,但对于const修饰的成员引用成员没有默认构造函数的自定义类型成员,必须借助初始化列表来初始化
  • 初始化列表为空或不显示时,对于自定义类型仍然会执行,会去调用其构造函数,即对于自定义类型成员变量,一定会先使用初始化列表初始化
  • 初始化列表中成员初始化的次序由成员声明的顺序决定,与初始列表中的顺序无关
  • 建议成员都在初始化列表进行初始化
  • 拷贝构造也有初始化列表

explicit 关键字

关于隐式类型转换

在这里插入图片描述
构造函数前加上 explicit 可禁止构造函数的隐式类型转换
C++11 扩展支持多参数的隐式类型转换,同样可用 explicit 禁止

静态成员

关于静态成员的引入背景

涉及一个类,统计计算机程序创建类对象的个数

  • 全局变量可以解决,但是不符合C++封装理念
  • 故引入静态成员变量
  • 静态成员变量不属于某个对象,为所有对象共有,属于整个类
  • 静态成员单独在全局进行定义初始化,可通过对象访问

静态函数的引用

  • 静态成员可通过对象的成员函数访问
  • 为解决访问时对象所在域内未定义类对象的问题
  • 引入静态成员函数,用 static 修饰成员函数
  • 静态成员函数没有隐含的 this 指针参数
  • 可直接通过类名访问静态成员函数

匿名对象

A() // 匿名对象的生命周期是其所在的一行

  • 常用来调用类
  • 函数返回对象时,也可以使用匿名对象

友元

友元提供了一种突破封装的方式,但是破环了耦合,不宜多用

  • 对于<<运算符重载这种需自定义参数、不需要this的函数、且需要访问类成员的函数,可以用friend修饰为友元函数解决
  • 友元类是单向的
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值