重载

    技术2022-05-13  4

    一、函数重载

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

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

    二、运算符重载

    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


    最新回复(0)