重载

来源:互联网 发布:echart java 导出图片 编辑:程序博客网 时间:2024/04/29 04:45

一、函数重载

两个以上函数,名字相同,但参数的类型或个数不同,返回值可能不同。编译器可知道在不同情况下调用哪个函数。

包括:构造函数重载,类成员函数重载,类以外的一般函数的重载

二、运算符重载

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

原创粉丝点击