- 9.1 包含保护
- 防止多次include同一个头文件
- #pragma once//在文件头部声明即可
- 用预处理指令ifndef保护
- #ifndef HEAD_H//定义的名称必须是头文件名的大写,点用下划线_替代
- #define HEAD_H
- #endif
- 类作为类型进行声明(以Time类举例)
- 对象
- Test sunset;
- 数组
- array<Time, arraySize> arrayOfTimes;
- 引用
- Time &dinnerTime = sunset;
- 指针
- Time *timePtr = &dinnerTime;
- 对象
- 类的组成与继承
- 组成:一个类的定义中包含另一个类的对象
- 继承:从已有的类派生出新的类
- 类的大小
- 每一个类的对象都是一个包含自己类数据的副本,不包含成员函数,成员函数是编译器创建独立于类的一份副本,供所有对象使用,是类的服务
- 防止多次include同一个头文件
- 9.2 类的作用域和类成员的访问
- 类成员的访问(以account类举例)
- Account account;Account &accountRef = account;Account *accountPtr = &accountRef;//类的声明,分别为对象、引用和指针
- 圆点成员选择运算符(.)
- account.setBalance();accountRef.setBalance();前面加对象或者对象的引用
- 箭头成员选择运算符
- accountPtr->setBalance();前面加指向对象的指针
- 类成员的访问(以account类举例)
- 9.3 访问函数和工具函数
- 访问函数:用来读取或者显示数据。通常也用来判定测试条件真假
- 工具函数:让类的其他成员函数操作private数据成员,这样的函数通常放在private中,仅供类的成员函数使用
- 9.4 具有默认实参的构造函数
- 函数模型声明
- explicit Time(int = 0; int = 0; int = 0);
- 构建具有默认实参的构造函数就可以节省重载构造函数的开销
- explicit Time(int = 0; int = 0; int = 0);
- 使用初始化器调用构造函数
- Time t2{};Time t3 = {};
- 默认的逐个成员赋值
- Date date1(7,4,2004);Date date2;date2 = date1;
- 通过赋值运算符=将date1的所有数据成员逐个赋给date2的数据成员
- 函数模型声明
- 9.5 构造函数和析构函数调用
- 析构函数
- 定义:在系统回收类对象之前进行扫尾工作,内存可以用来保存新的对象
- ~Time();//在类名前面加上发音字符~表示析构函数
- 注意:析构函数不接受任何参数,不返回任何值
- 定义:在系统回收类对象之前进行扫尾工作,内存可以用来保存新的对象
- 调用顺序
- 全局作用域的对象按全局内顺序最先调用构造函数,最后调用析构函数
- 局部对象同全局作用域对象
- 当有static声明时,构造函数调用顺序保持不变,但是析构函数会在程序执行终止之前调用,即在全局作用域对象析构函数调用之前,局部对象析构函数调用之后执行
- 析构函数
- 9.6 组成
- 组成类的默认复制构造函数(以Date类为例)
- 当初始化组成类时采用birthdate(birth),但是Date是需要提供参数的,此时编译器会利用复制构造函数隐式的定义它,直接将birth的参数赋给birthdate
- 补充:隐式定义不会包含任何输出语句,因为在Date类的定义时会有输出,但是初始化Employee类时没有输出
- 组成类的默认复制构造函数(以Date类为例)
- 9.7 friend函数和friend类
- 声明:在函数或类的前面加上friend保留字
- friend class ClassTwo;/friend void setX();
- 注意:friend函数或者类前不需要添加访问权限符,因此他的声明可以出现在类的任何地方,一般在类的最前面定义
- friend函数修改类的private数据
- 友元函数/类是独立于类的存在,因此在类之外也可以直接调用
- 作为友元函数/类可以直接访问private成员数据,因此可以修改类的private数据
- 声明:在函数或类的前面加上friend保留字
- 9.8 this指针
- 避免名字冲突
- 成员函数的参数与数据成员名字一样时,可以使用this指针解决
- void Time::setHour(int Hour){this->hour = hour;}
- 隐式、显式、间接使用this指针访问数据成员
- 隐式
- cout << x;
- 显式
- cout << this->x;
- 间接
- cout << (*this).x;
- 隐式
- 串联的调用函数
- 让每个函数都通过this指针返回指向该对象即(*this)从而实现一句话调用多个函数
- 注意:每个对象都可以使用this指针来访问自己的地址,this指针回作为一个隐式的参数传给每个非static成员函数
- 避免名字冲突
- 9.9 static类成员
- 访问静态成员数据
- public成员
- 通过二元作用域运算符访问
- private/protected成员
- 存在实例化对象时
- 成员函数、友元函数访问
- 不存在实例化对象时
- 通过static成员函数访问
- static是独立于类存在的,共所有对象使用,即使没有实例化对象,也仍然可以调用
- 存在实例化对象时
- public成员
- 访问静态成员数据
09 chapter 类的深入剖析:抛出异常(cpp大学教程)学习笔记
最新推荐文章于 2024-01-25 22:19:28 发布