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关闭上述隐式特性。应谨慎地使用隐式转换函数,且过多的转换函数将产生二义性。