Download presentation
Presentation is loading. Please wait.
1
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计
2
基本知识 a C++语言程序设计
3
9.5 运算符重载 运算符重载 运算符重载的实质就是函数重载 是C++的一个特性,使得程序员可以把C++的运算符扩展到用户自定义的类类型中
对已有的运算符赋予多重含义,使同一运算符作用于不同类型的数据时发生不同的行为 C++语言程序设计
4
例:使用字符串处理函数完成字符串的复制和连接
9.5 运算符重载 例:使用字符串处理函数完成字符串的复制和连接 //使用字符串处理函数复制和连接字符串 #include <cstring> #include <iostream> using namespace std; void main() { char *s1="Hello"; char *s2="world"; char s3[80] =""; strcpy(s3,s1); //字符串复制 cout<<s3<<endl; strcat(s3,s2); //字符串连接 } C++语言程序设计
5
例:使用重载运算符“=”和“+”完成字符串的复制和连接
9.5 运算符重载 例:使用重载运算符“=”和“+”完成字符串的复制和连接 //使用重载运算符复制和连接字符串 #include <string> #include <iostream> using namespace std; void main() { string s1="Hello"; string s2="world"; string s3; s3=s1; //字符串复制 cout<<s3<<endl; s3=s1+s2; //字符串连接 } C++语言程序设计
6
9.5 运算符重载 运算符重载的规则 重载运算符时,运算符的运算顺序和优先级不变,操作数个数不变
不能创造新的运算符,只能重载C++中已有的运算符,并且规定有6个运算符不能重载 一般来讲,重载后的运算符的功能应当与运算符的实际意义相符 运 算 符 含 义 . 类属关系运算符 .* 成员指针运算符 :: 作用域运算符 ?: 条件运算符 # 编译预处理符号 sizeof 取数据类型的长度 C++语言程序设计
7
9.5 运算符重载 运算符重载的形式: C++语言程序设计 重载为类的成员函数 重载为类的友元函数
函数定义可以放在类的声明中,也可以在类声明的外部 类外定义的形式为:函数类型 类名::operator 运算符(形参表) { 函数体 } 重载为类的友元函数 类的声明中需要声明该函数为友元函数:friend 函数类型 operator 运算符(形参表); 函数定义必须在类的外部,形式为:函数类型 operator 运算符(形参表) C++语言程序设计
8
9.5 运算符重载 关于运算符重载定义的几点说明 函数类型指明了重载运算符的返回值类型,也就是运算结果类型
operator是定义运算符重载的关键字 “运算符”即要重载的运算符名称 形参表给出的是运算符需要的操作数 重载为成员函数:对象本身就是其中的一个操作数,形参表内参数的数目比操作数的数目少一个 重载为友元函数:每个形参代表运算符的一个操作数,形参表内参数的数目等同于操作数的数目 C++语言程序设计
9
例:创建一个复数类,将+、−、+=运算符重载为成员函数
9.5 运算符重载 例:创建一个复数类,将+、−、+=运算符重载为成员函数 //创建一个复数类,将+、−、+=运算符重载为成员函数 #include <iostream> #include <iomanip> using namespace std; class complex{ public: complex(double real=0,double imag=0): r(real),i(imag) {} complex operator +(complex&); //重载运算符的函数原型 complex operator -(complex&); complex& operator +=(complex&); void print() {cout<<setiosflags(ios::showpos)<<r<<" "<<i<<'i'<<endl;} private: double r , i; }; C++语言程序设计
10
9.5 运算符重载 C++语言程序设计 complex complex::operator +(complex& c) //重载“+”运算符
{ return complex(r+c.r,i+c.i); } complex complex::operator -(complex& c) //重载“-”运算符 return complex(r-c.r,i-c.i); Complex& complex::operator +=(complex& c) //重载“+=”运算符 r+=c.r; i+=c.i; return *this; C++语言程序设计
11
9.5 运算符重载 C++语言程序设计 void main() { complex c1(1,1),c2(3,3),c3;
c3.print(); c3=c1-c2; //复数相减 c3+=c2+=c1; //复数相加后赋值 } C++语言程序设计
12
例:创建一个复数类,将+、−、+=运算符重载为友元函数
9.5 运算符重载 例:创建一个复数类,将+、−、+=运算符重载为友元函数 //创建一个复数类,将+、−、+=运算符重载为成员函数 #include <iostream> #include <iomanip> using namespace std; class complex{ public: complex(double real=0,double imag=0): r(real),i(imag) {} friend complex operator +(complex&,complex&); friend complex operator -(complex&,complex&); friend complex& operator +=(complex&,complex&); void print() {cout<<setiosflags(ios::showpos)<<r<<" "<<i<<'i'<<endl;} private: double r , i; }; C++语言程序设计
13
9.5 运算符重载 complex operator +(complex& c1,complex& c2) //重载“+”运算符 { return complex(c1.r+c2.r,c1.i+c2.i); } complex operator -(complex& c1,complex& c2) //重载“-”运算符 return complex(c1.r-c2.r,c1.i-c2.i); complex& operator +=(complex& c1,complex& c2) //重载“+=”运算符 c1.r+=c2.r; c1.i+=c2.i; return c1; C++语言程序设计
14
9.5 运算符重载 C++语言程序设计 void main() { complex c1(1,1),c2(3,3),c3;
c3.print(); c3=c1-c2; //复数相减 c3+=c2+=c1; //复数相加后赋值 } C++语言程序设计
Similar presentations