C++之------运算符重载
2014-09-06 21:41
218 查看
① 什么是运算符重载?
何为C++的运算符重载呢?
其实就是运算符给它重新赋予新的含义或者多重含义。让它有另外一种新的功能。
为什么需要运算符重载?
面向对象中为了实现类的多态性,我们就引用了运算符重载
程序中可以利用“+”、“—” 对整数、单精度、双精度以及指针进行加法和减法运算等
例如:
②运算符重载由来
在计算机的内存中,整数与浮点数的存储形式是不一样的,计算机他们的加减运算的处理过程是不同的,
而且指针-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对象的加,
比喻下面的例子
使用成员函数来重载Complex的+、-运算符操作
运行结果:
C++编译器的处理为(a.operator +(b)).operator –(d)
③哪些运算符可以重载?
运算符的重载有哪些呢?
可以被重载的运算符
类成员访问运算符:->
看看网上的一个例子:
这里我们直接编译器测试输出结果:
理解: A_Ptr类封装了类A对象,语句“aptr->print();”中的“aptr->”部分,编译器调用“A *aptr.operator ->();”,
返回一个指向类A的对象的指针。然后调用该指针所指向对象的print函数。即调用过程为: (aptr.operator ->())->print();
END!
马上快过中秋节了,公司放了三天,没有妹纸,出去玩没意思,那就好好补下知识。
也提前祝大家中秋节快乐,幸福安康!
本人屌丝一个,没钱送月饼大家,送我一美女同事照片给大家养养眼。夏天酷热难耐,愿美女给大家带来一丝清凉感。
夏天炎热,不要湿身哦
最近的一件新闻大家注意一下:一手游公司程序员,加班挂掉,才25岁。!!!
还是那件事:程序员晚上要少撸代码多休息。所有健康很重要哦。今天还专门炖了一大电饭煲鸡蛋排骨汤吃来补身子。
洗澡休息吧。
何为C++的运算符重载呢?
其实就是运算符给它重新赋予新的含义或者多重含义。让它有另外一种新的功能。
为什么需要运算符重载?
面向对象中为了实现类的多态性,我们就引用了运算符重载
程序中可以利用“+”、“—” 对整数、单精度、双精度以及指针进行加法和减法运算等
例如:
int a = 1+2; //对整数加 double d = 1.0+2.54; //对双精度加 int por[10]; int *p = por; 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对象的加,
比喻下面的例子
int main(){ Complex a(10, 7), b(3, 5); Complex c= a + b; Complex d = a - b; Complex e = a + b - d; cout << "c="; c.print_complex(); cout << "d="; d.print_complex(); cout << "e="; e.print_complex(); int x=100, y=200, z; z = x + y; cout << "z=" << z; }
使用成员函数来重载Complex的+、-运算符操作
#include <iostream> using namespace std; class Complex { private: double rpart, ipart; public: Complex ( ) { rpart=ipart=0.0; } Complex(double rp, double ip){ rpart=rp; ipart=ip; } Complex operator +(const Complex &c){ Complex temp(rpart+c.rpart, ipart+c.ipart); return temp; } Complex operator -(const Complex &c); void print_complex() { cout<< "(" << rpart<<','<<ipart << "i)" <<endl; } }; //类外实现operator –函数 Complex Complex::operator -(const Complex &c){ Complex temp(rpart-c.rpart, ipart-c.ipart); return temp; }
运行结果:
C++编译器的处理为(a.operator +(b)).operator –(d)
③哪些运算符可以重载?
运算符的重载有哪些呢?
可以被重载的运算符
单目运算符 | +(正)、-(负)、*(指针)、&(取地址) |
双目算术运算符 | +(加)、-(减)、*(乘)、/(除)、%(取摸) |
自增自减运算符 | ++(自增)、--(自减) |
逻辑运算符 | ||(逻辑或)、&&(逻辑与)、!(逻辑非) |
关系运算符 | = =(等于)、!=(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于) |
位运算符 | |(按位或)、&(按位与)、~(按位取反)、^(按位异或)、<<(左移)、>>(右移) |
赋值运算符 | =、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>= |
内存申请与释放 | new、delete[]、new[]、delete[] |
其他运算符 | ()(函数调用)、->(成员访问)、->*(成员指针访问)、,(逗号)、[](下标) |
看看网上的一个例子:
1 #include <iostream> 2 using namespace std; 3 class A{ 4 public: 5 A(double v){ 6 value = v; 7 } 8 print(){ 9 cout << value; 10 } 11 private: 12 double value; 13 }; 14 class A_Ptr{ 15 public: 16 A_Ptr(A* p){ 17 pa = p; 18 } 19 A* operator ->(){ 20 return pa; 21 } 22 private: 23 A* pa; 24 };
这里我们直接编译器测试输出结果:
理解: A_Ptr类封装了类A对象,语句“aptr->print();”中的“aptr->”部分,编译器调用“A *aptr.operator ->();”,
返回一个指向类A的对象的指针。然后调用该指针所指向对象的print函数。即调用过程为: (aptr.operator ->())->print();
END!
马上快过中秋节了,公司放了三天,没有妹纸,出去玩没意思,那就好好补下知识。
也提前祝大家中秋节快乐,幸福安康!
本人屌丝一个,没钱送月饼大家,送我一美女同事照片给大家养养眼。夏天酷热难耐,愿美女给大家带来一丝清凉感。
夏天炎热,不要湿身哦
最近的一件新闻大家注意一下:一手游公司程序员,加班挂掉,才25岁。!!!
还是那件事:程序员晚上要少撸代码多休息。所有健康很重要哦。今天还专门炖了一大电饭煲鸡蛋排骨汤吃来补身子。
洗澡休息吧。
[b]欢迎大家一起交流 ,[b]分享程序员励志故事。 幸福的程序员 QQ群: [/b] [/b]
相关文章推荐
- 王老师 C++ 运算符重载 转换函数 第一讲
- [C++学习]矩阵运算符重载
- [转] C++ 运算符重载 转换函数
- C++中运算符重载
- 第八章 C++函数的高级特性(8.3 参数的缺省值 8.4 运算符重载 8.5 函数内联)
- c++ 运算符重载
- C++ 中的运算符重载
- C++编程实例-运算符重载
- C++学习摘要之七:运算符重载
- c++中的运算符重载
- C++-运算符重载
- C++的=运算符重载并非简单内存拷贝
- C++中运算符重载实例
- 老陈学 C++ 序列之一: 运算符重载
- 浅谈C++中运算符重载
- 王老师 C++ 运算符重载 转换函数 第三讲
- C++对象的++,--运算符重载 374-39
- c++中运算符重载遇到的问题
- C++ 运算符重载 一个例子
- C++的运算符重载