"C++ Primer" 读书笔记 第十二章 类

  • 在类体内部定义的成员函数缺省为inline函数。适用于代码量较小的如存取函数。
  • 抽象和封装:抽象是让使用和实现分离,封装是实现抽象的手段,将内部实现黑盒化
  • 当两个类互相依赖时,总有一个类要先被定义:可以用类的前向声明实现声明不完全类型(例如要在A类中定义一个B类成员变量,在B类中定义一个A类成员变量)

  this指针

  类的所有成员函数都有一个附加的隐含形参,即指向调用这个成员函数的对象本身的一个指针。this指针由编译器隐式地定义,不能在成员函数中显式地定义。

  • 一个成员函数需要返回自身的引用,return *this;
  • 为什么需要返回自身的引用呢?因为需要连续调用成员函数如:a.func1().func2(),且从左边往右边调用。
  • 如果func1()是一个const成员函数,则由于const对象不能调用非const成员,因此a.func1().func2()会报错,此时需要重载该成员  
  • const成员函数也并非完全不能修改成员变量的值:可变数据成员(加mutable关键字)可以被const成员函数修改

 

  • 类作用域就是在该域内,可以直接访问该类的成员变量、成员函数、局部类型别名等
  • 完全限定名可以进入类作用域
  • 构造函数初始化列表是必须的!因为没有默认构造函数的类类型的成员、const或引用类型的成员必须被初始化
  • 友元
    • 对象的友元可以访问该对象的私有成员
    • 友元可以是其他类、其他类的指定成员函数、或者是非成员变量函数
    • 在类体内声明一个友元相当于普通的声明,之后不必在类体外再声明
    • 非成员函数作为友元,可以直接在类体内部定义函数体
  • static类成员
    • 我们知道static局部变量的生命周期是整个进程,且static局部变量独立于所在函数的任意次调用而存在;
    • 类的static成员能独立于这个类的不同对象实例存在,static是某种类的所有对象共享的
    • static成员可以是成员变量或者成员函数,显然static成员函数没有this指针,因为它并不与某个特定的对象挂钩,static成员函数的内部代码只能访问类的static成员
    • static成员变量用于描述这个类本身的某些性质,与对象无关
    • static成员函数不能被声明为const,因为const成员函数的意义是在这个函数内部不能修改该对象的成员,而static成员是与对象无关的
    • static数据成员可以作为默认实参
    • static成员函数必须在类的外部定义,在内部声明时要加static关键字,而在定义时不用加
    • static数据成员则可以在类体中初始化,事实上只要初始化式是一个常量表达式,连static成员函数都可以在类体中直接定义  

 

posted @ 2019-09-04 19:29  LiaoQian1996  阅读(67)  评论(0编辑  收藏  举报