① ?什么是运算符重载?
?
?
?
?
其实就是运算符给它重新赋予新的含义或者多重含义。让它有另外一种新的功能。
?
?
?
? ? ?为什么需要运算符重载?
?
面向对象中为了实现类的多态性,我们就引用了运算符重载
?
?
?
程序中可以利用“+”、“—” 对整数、单精度、双精度以及指针进行加法和减法运算等
?
例如:
?
1 int a = 1+2; //对整数加
2 double d = 1.0+2.54; //对双精度加
3 int por[10];
4 int *p = por;
5 p = p- 1; //对指针减1
?
?
②运算符重载由来
?
?
?
? ? ? ? ? 在计算机的内存中,整数与浮点数的存储形式是不一样的,计算机他们的加减运算的处理过程是不同的,
?
而且指针-1并不是简单的地址-1而已。在
C++里面,编译器来处理这些问题,它可以根据表达式两侧的类型来决
?
定应该如何处理他们的运算,最后决定该执行什么操作。所以在C++中可以对运算符可以对不同类型进行运算操作。
?
?
?
现实中的问题:复数的运算-------
?
? ? 可能很多童鞋忘了什么是复数.咋们先来说说什么是复数(光谷的学到老活到老)
?
复数是指能写成如下形式的数a+bi,这里a和b是实数,i是虚数单位。在复数a+bi中,a称为复数的实部,b称
?
为复数的虚部,i称为虚数单位。当虚部等于零时,这个复数就是实数;当虚部不等于零时,这个复数称为虚数,复数的
?
实部如果等于零,则称为纯虚数。由上可知,复数集包含了实数集,并且是实数集的扩张。 复数是由意大利米兰学者
?
卡当在十六世纪首次引入,经过达朗贝尔、棣莫弗、欧拉、高斯等人的工作,此概念逐渐为数学家所接受。(来自:百度百科)
?
?
?
?
?
好,来正题:
?
比如两个复数:S1=(1+2i) ?S2=(6+1.2i)
?
我们在数学里面进行两个复数相加S=S1+S2=(7+3.2i) ?(实部与实部相加,虚部与虚部相加)
?
在C++里面我们如何计算呢 ?
?
所有我们需要用到运算符的重载。
?
?
?
③ ?程序中运算符重载格式
?
?
?
重载的运算符函数语法为:
?
重载运算符的函数一般格式如下:
? ? <返回值类型># operator 运算符名称 (形参表列)
? ? {
? ? ? ? // 对运算符的重载处理
? ? }
?
?operator为关键字,专门用于定义重载的运算符函数,#代表要被重载的运算符。如:
?
Complex operator + (const Complex& a, const Complex& b){ ...... } 该函数可以用来是是实现对两个Complex对象的加,
?
?
比喻下面的例子
?
复制代码
?1 int main(){
?2 ? ? Complex a(10, 7), b(3, 5);
?3 ? ? Complex c= a + b;
?4 ? ? Complex d = a - b;
?5 ? ? Complex e = a + b - d;?
?6 ? ? cout << "c="; c.print_complex();
?7 ? ? cout << "d="; d.print_complex();
?8 ? ? cout << "e="; e.print_complex();
?9 ? ? int x=100, y=200, z;
10 ? ? z = x + y;
11 ? ? cout << ?"z=" << z;
12 }
复制代码
使用成员函数来重载Complex的+、-运算符操作
?
复制代码
?1 #include
?2 using namespace std;
?3 class Complex {
?4 private:
?5 ? ? double rpart, ipart;
?6 public:
?7 ? ? Complex ( ) { rpart=ipart=0.0; }
?8 ? ? Complex(double rp, double ip){
?9 ? ? ? ? rpart=rp; ipart=ip;
10 ? ? }
11 ? ? Complex operator +(const Complex &c){
12 ? ? ? ? Complex temp(rpart+c.rpart, ipart+c.ipart);
13 ? ? ? ? return temp;
14 ? ? }
15 ? ??
16 ? ? Complex operator -(const Complex &c);
17 ? ? void print_complex()
18 ? ? {
19 ? ? ? ? cout<< "(" << rpart<<','<
20 ? ? }
21 };
22 //类外实现operator –函数
23 Complex Complex::operator -(const Complex &c){
24 ? ? Complex temp(rpart-c.rpart, ipart-c.ipart);
25 ? ? return temp;
26 }