C++运算符重载知识总结
在C++中,多态性的实现和联编(也叫绑定)这一概念有关。
源程序—>编译、连接—>可执行文件 这一过程时把可执行代码联编在一起的过程。其中在运行之前就完成的联编叫做静态联编,又叫前期联编;而在程序运行时才完成的联编叫动态联编,也叫后期联编。
静态联编(前期联编):指系统在编译时就决定如何实现某一动作。要求在编译时就知道调用函数的全部信息。
静态联编支持的多态性成为编译时多态性(静态多态性),通过函数重载(包括运算符重载)和模板实现。
优点:函数调用速度很快,效率高。
动态联编(后期联编):指系统在运行时动态实现某一动作。采用这种联编方式,一直要到程序运行时才能确定调用哪个函数。
动态联编支持的多态性成为运行时多态性(动态多态性),通过虚函数实现。
优点:提供了更好的灵活性、问题抽象性和程序易维护性。
为了表达上的方便,人们希望预定义的运算符(如+、-、*、/等)在特定的对象上以新的含义进行解释,如希望能够实现两个复数类的加减,这就需要通过运算符重载来解决。
C++中进行运算符重载时,必须定义一个运算符重载函数,其名字为operator,后随一个要重载的运算符。
函数
功能
operator+
加法
operator-
减法
operator*
乘法
operator<
小于
……
…...
例如,使两个Complex类对象相加的例子
#include <iostream>
using namespace std;
class Complex
{
public:
double real;
double imag;
Complex(double r=0,double i=0)
{
real=r;imag=i;
}
};
Complex operator+(Complex co1,Complex co2)//类外定义运算符+的重载函数
{
Complex temp;
=+;
=+;
return temp;
}
int main()
{
Complex com1(,),com2(,),total1,total2;
total1=operator+(com1,com2);//运算符重载函数第一种调用方式,显式调用
cout<<"real1="<<<<",imag1="<<<<endl;
total2=com1+com2;//运算符重载函数第二种调用方式,隐式调用
cout<<"real2="<<<<",imag2="<<<<endl;
return 0;
}
C++语言对运算符重载制定了以下一些规则:
,不能重载的只有以下几个:
.
成员访问运算符
.*
成员指针访问运算符
::
作用域运算符
sizeof
长度运算符
?:
条件运算符
,不允许用户自己定义新的运算符。
,不建议改变原运算符的含义。(例如将+运算符重载为进行减法运算)
(即操作数)的个数。
。
。
(或其引用)。目的是防止用户修改用于标准类型数据的运算符性质。
、类成员函数、类的友元函数。
“="可以不必用户进行重载。
1)在类的内部,形式为:
friend 函数类型 operator 运算符(形参表)
{
函数体
}
2)类内声明,类外定义,形式为:
class X{
friend 函数类型 operator 运算符(形参表);
};
函数类型 operator 运算符(形参表)
C 运算符重载知识点总结 来自淘豆网www.taodocs.com转载请标明出处.