C++ primer 笔记7. 类

定义抽象数据类型

  • const常量成员函数:不能改变调用它的对象内容

  • 利用引用传递定义IO类函数:

  • 默认构造函数:

      如果没有定义构造函数,则编译器会隐式定义一个默认构造函数

      如果定义了别的构造函数,仍然需要使用默认构造函数,则利用default显示定义:

定义在函数内部的成员函数自动是inline,在类外部可以用inline关键词修饰函数定义

  • 构造函数初始值列表:

 

 

访问控制与封装

class默认访问权限:private

struct默认访问权限:public

  • 友元:

 

 

类的其他特性

  • 可变数据成员:

      在const成员函数中,希望能修改类的某个成员数据,在变量的声明中加入mutable

  • 类数据成员的初始值:

  • const 函数重载:

  • 类的声明:

      类声明但未定义时,是个不完全类型,可以定义指针或引用,可以声明以该类型为参数或返回类型的函数

      类为定义时,不能定义它的对象(无法了解存储空间)

      类的成员类型不能是该类自己,可以是该类的引用或指针

  • 类之间的友元关系:

友元声明并非函数声明

 

 

构造函数

  • 构造函数初始值列表:

      对于成员是引用,const,未提供默认构造函数的类类型,必须使用构造函数初始值列表

      构造函数初始值列表进行初始化的顺序与类定义中的出现顺序一致,和列表中的前后位置无关

  • 委托构造函数:

  • 隐式的类类型转换:

      需要多个实参的构造函数不能用于执行隐式转换

      explicit 阻止构造函数定义的隐式转换:只需要在类内声明使用;只允许直接初始化

      执行显示转换:

  • 聚合类:

      所有成员都是public

      没有定义构造函数

      没有类内初始值

      没有基类,virtual函数

  • 字面值常量类

      聚合类是字面值常量类

      要求:

            数据成员都是字面值类型

            至少有1个constexpr构造函数

            如果一个数据成员有类内初始值,则初始值为一条常量表达式

            如果有成员为某种类类型,则初始值必须使用constexpr构造函数

            必须使用析构函数的默认定义

      constexpr构造函数形式:

            函数体为空,必须初始化所有数据成员

      创建constexpr对象

 

静态成员

静态成员函数不能声明成const,也不能在static函数体内使用this指针

在类外部定义静态成员函数时,不需要使用static

通常情况,类的静态成员不应该在类的内部初始化

可以为静态成员提供const整数类型的类内初始值,要求静态成员必须是constexpr:

静态成员的类型可以是它所属的类类型

 

 

 

发布了59 篇原创文章 · 获赞 0 · 访问量 2851

猜你喜欢

转载自blog.csdn.net/I_ren/article/details/105728934