2015年5月14日 星期四 10:37
第三部分 类和数据抽象 第12章~14章
第12章 类
- 类的定义和声明,数据抽象和封装
- 隐含的this指针
- 何时使用this指针,最常见情况:函数返回对调用该函数的对象的引用
- 返回*this
- 从const成员函数返回*this
- mutable,希望类的数据成员(甚至在const成员函数内)可以修改,可以通过将他们声明为mutable来实现
- 类作用域
- 构造函数
- 构造函数可以被重载
- 实参决定使用哪个构造函数
- 构造函数自动执行
- 用于const对象的构造函数,const构造函数是不必要的。
- 成员初始化的次序,它与成员被声明的次序一致,尽可能避免使用成员来初始化其他成员
- 默认构造函数
- 友元
- friend机制允许一个类对其非公有成员的访问权授予指定的函数或类
class Screen{ friend class Window_Mgr; ...... }
- friend机制允许一个类对其非公有成员的访问权授予指定的函数或类
- static类成员
- 非static数据成员存在于每个类类型的对象中
- static数据成员独立于对象,是与类关联的对象。特殊的整型const static数据成员可以在类的定义体内初始化
- static成员函数没有this指针,可直接访问static成员,不可直接访问非static成员
第13章 复制控制
复制构造函数 copy constructor
析构函数 destructor
赋值操作符 assignment operator
- 复制构造函数,C++支持两种初始化形式,复制初始化和直接初始化,iostream类不允许复制
-
string null_book="9-999-99999-9"; //copy-initialization string dots(10,‘.‘); //direct-initialization string empty_copy=string(); //copy-initialization string empty_direct; //direct-initialization
- 赋值构造函数
class Sales_item{ public: //赋值操作符的的声明 Sales_item& operator =(const Sales_item&); }
- 析构函数
- 何时调用析构函数,撤销类对象时会自动调用析构函数。动态分配的对象超出作用域也不会运行析构函数,只有在指向该对象的指针被删除时才删除,如果没有删除指针,则不会运行该对象的析构函数。
第14章 重载操作符与转换
- 重载操作符的定义
- 赋值=,下标[],调用()和成员访问箭头->等操作符必须定义为成员函数
- 复合赋值操作通常定义为类的成员,如果定义为非成员函数,编译器也不会报错
- 改变对象状态或给定类型紧密联系的其他操作符,如自增,自减和解引用,通常定义为类成员
- 对称的操作符,如算术操作符、相等操作符、关系操作符和位操作符,最好定义为普通非成员函数
- 输入和输出操作符
- <<和>>操作符的重载
- 当定义符合标准库函数iostrean规范的输入或输出操作符时,必须使它成为非成员操作符。这是因为,如果将操作符定义为类成员,左操作数将只能是该类类型的对象,item<<cout;不符合正常使用方式
- 算术操作符和关系操作符
- 为了与内置操作符保持一致,加法返回一个右值,而不是一个引用
- 定义了operator==的类给容易与标准库一起使用。有些算法如find默认使用==caozuofu
- 关联容器以及某些算法,使用默认<操作符。一般而言,关系操作符,诸如相等操作符。应定义为分成员函数
- 赋值操作符
- 下标操作符 operator[],提供读写访问
- 成员访问操作符*,->
- 自增操作符和自减操作符
- 调用操作符和函数对象
- 转换和类类型 转换操作符,operator type()
- 转换类型必须是成员函数,不能指定返回类型,并且形参必须为空
- 转换函数一般不应该改变被转换的对象,因此,转换操作符通常定义为const成员
时间: 2024-10-14 03:51:45