09 chapter 类的深入剖析:抛出异常(cpp大学教程)学习笔记

  • 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;
    • 类的组成与继承
      • 组成:一个类的定义中包含另一个类的对象
      • 继承:从已有的类派生出新的类
    • 类的大小
      • 每一个类的对象都是一个包含自己类数据的副本,不包含成员函数,成员函数是编译器创建独立于类的一份副本,供所有对象使用,是类的服务
  • 9.2 类的作用域和类成员的访问
    • 类成员的访问(以account类举例)
      • Account account;Account &accountRef = account;Account *accountPtr = &accountRef;//类的声明,分别为对象、引用和指针
      • 圆点成员选择运算符(.)
        • account.setBalance();accountRef.setBalance();前面加对象或者对象的引用
      • 箭头成员选择运算符
        • accountPtr->setBalance();前面加指向对象的指针
  • 9.3 访问函数和工具函数
    • 访问函数:用来读取或者显示数据。通常也用来判定测试条件真假
    • 工具函数:让类的其他成员函数操作private数据成员,这样的函数通常放在private中,仅供类的成员函数使用
  • 9.4 具有默认实参的构造函数
    • 函数模型声明
      • 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类时没有输出
  • 9.7 friend函数和friend类
    • 声明:在函数或类的前面加上friend保留字
      • friend class ClassTwo;/friend void setX();
      • 注意:friend函数或者类前不需要添加访问权限符,因此他的声明可以出现在类的任何地方,一般在类的最前面定义
    • friend函数修改类的private数据
      • 友元函数/类是独立于类的存在,因此在类之外也可以直接调用
      • 作为友元函数/类可以直接访问private成员数据,因此可以修改类的private数据
  • 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是独立于类存在的,共所有对象使用,即使没有实例化对象,也仍然可以调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值