一、函数重载
两个以上函数,名字相同,但参数的类型或个数不同,返回值可能不同。编译器可知道在不同情况下调用哪个函数。
包括:构造函数重载,类成员函数重载,类以外的一般函数的重载
二、运算符重载
1、用成员函数重载运算符
class A
{A operator (运算符) (A a);//一般运算符是+ — * /,即运算有后第三个数产生,函数体声明类,返回类
void operator (运算符) (A a);//一般是= += -=,即在原来数的基础上运算
};
可实现同类,不同对象之间的加减乘除等。
2、用友元重载运算符
既然是友元,就是独立于类外的一般函数。所以形参要全部给出:
class A
{ friend A operator (运算符) (A a1,A a2);
};
可实现a1,a2之间的各种运算
3、1,2的区别
当重载函数为成员函数时,二元运算符的左操作数为调用重载函数的对象。右操作数为实参。当重载函数为友元函数时,二元运算符的左操作数为调用重载函数的第一个实参。右操作数为第二个实参。
4、++ --的重载
对于“++”、“――”运算符存在前置运算与后置运算的问题,因此,运算符重载函数必须分为两类。
1)成员函数前置“++”运算符重载的一般格式为:<类型> operator ++ (); 后置“++”运算符重载的一般格式为:<类型> operator ++ ( int );2)友元函数前置“++”运算符重载的一般格式为:<类型> operator ++ ( 类名 &); 后置“++”运算符重载的一般格式为:<类型> operator ++ ( 类名 &,int );
其中:形参为要实现“++”运算的对象,int 只是用于区分是前置还是后置运算符,并无整型数的含义。
当类中的私有的自加变量只有一个时,类型可为void
5、()[]的重载
多用于矩阵中,计算元素位置。
6、new delete的重载
1)覆盖缺省定义的全局方式
2)只针对一个类的局部方式
7、= 的重载
可重载为成员函数,且不能被继承。
一般系统每个类都生成一个缺省的赋值运算符。但容易产生指针悬挂问题,就是赋值后原来的区域被封锁起来,没有被释放。当执行析构函数时,被赋值的区域又被释放了2次。
欢迎我的新浪博客:http://blog.sina.com.cn/barbarac