设为首页 加入收藏

TOP

C++之------运算符重载
2015-07-20 17:44:49 来源: 作者: 【 】 浏览:3
Tags:------ 运算 重载
① ?什么是运算符重载?
?
?
?
? ? ?何为C++的运算符重载呢?
?
其实就是运算符给它重新赋予新的含义或者多重含义。让它有另外一种新的功能。
?
?
?
? ? ?为什么需要运算符重载?
?
面向对象中为了实现类的多态性,我们就引用了运算符重载
?
?
?
程序中可以利用“+”、“—” 对整数、单精度、双精度以及指针进行加法和减法运算等
?
例如:
?
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 }
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇多线程对信号的接受处理 下一篇UVA - 1498 Activation (DP+概率..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·MySQL 安装及连接-腾 (2025-12-25 06:20:28)
·MySQL的下载、安装、 (2025-12-25 06:20:26)
·MySQL 中文网:探索 (2025-12-25 06:20:23)
·Shell脚本:Linux Sh (2025-12-25 05:50:11)
·VMware虚拟机安装Lin (2025-12-25 05:50:08)