C++ Primer Plus 第十一章总结——使用类

1.运算符重载是一种多态形式,是对象操作更加美观方便。其限制为:不能违反运算符原来的句法规则,不能修改运算符的优先级,不能创建新运算符;“=、()、[]、->”四个运算符只能通过成员函数进行重载。

  result = obj1.operator op(obj2); //显示调用

  result = obj1 op obj2;         //隐式调用

2.使用重载函数的版本选择标准是参数的数目、类型和排列顺序,即特征标。

3.不要返回指向局部变量或临时对象的引用,函数执行完毕时,引用将指向不存在的数据。

4.友元函数与成员函数一样拥有访问私有数据和方法的权限。友元函数的定义不要使用类作用域解析符、不使用关键字friend。

5.类允许从本质上、而不是表达方式上看待一个量。类中存储多种表示方式,并且定义类函数进行表示方式的转换。

6.常用的友元重载运算符函数<<,其通用格式为(返回类型为ostream&实现了表达式的拼接;而且ostream没有公有的复制构造函数,必须使用引用):

1  ostream& operator <<(ostream& os, const Classname& obj)
2   {
3       os << ...;
4       return os;
5   }

 

7.获取随机数的常用方法(C++11 的头文件random能提供更强大的支持):

 1 #include <cstdlib> //for srand() rand()
 2   #include <ctime> //for time()
 3   #define RANGE 7;
 4   //time(0)返回当前时间,为从某一日期开始的秒数 该函数的参数接受time_t变量的地址,             
 5   //对该变量赋值,并返回它
 6   //srand()可设置初始种子值
 7   //rand()通过某种算法使用种子值获得随机数,返回0到某个值(取决于实现)之间的随              
 8   //机整数。第一次调用时,使用初始种子值,后面的调用使用上次生成的随机值
 9 
10   int main()
11   {
12       srand(time(0)); //设置随机的初始种子值
13       int iNum = rand() % RANGE + 1; //范围1 - RANGE 的随机值
14 ...

 

8.其他类型转为类类型:接受一个参数或除了第一个参数外、其他参数都提供了默认值的构造函数能进行类型转换,关键字explicit将关闭上述的隐式特性,只允许显式转换;类类型转为其他类型:特殊的C++运算符函数,它必须是类方法,无返回类型,无参数,格式为 "operator typeName();" ,在C++11中能使用explicit关闭上述隐式特性。应谨慎地使用隐式转换函数,且过多的转换函数将产生二义性。

上一篇:《C++Primer》第七章——类


下一篇:python 小技巧(import模块、查询类继承关系、安装包)