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

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

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

初始化列表

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

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

explicit 关键字

关于隐式类型转换

【C++】初始化列表,explicit 关键字,静态成员
构造函数前加上 explicit 可禁止构造函数的隐式类型转换
C++11 扩展支持多参数的隐式类型转换,同样可用 explicit 禁止

静态成员

关于静态成员的引入背景

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

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

静态函数的引用

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

匿名对象

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

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

友元

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

  • 对于<<运算符重载这种需自定义参数、不需要this的函数、且需要访问类成员的函数,可以用friend修饰为友元函数解决
  • 友元类是单向的