运算符重载 课件 .pdf
第七章运算符重载
7.1本章简介
采用面向对象的程序设计时,C++允许程序
设计者重新定义已有的运算符的功能,并能
按设计者规定要求去完成特定的操作,这就
是运算符的重载。其本质是通过调用一个函
数来实现运算符的功能。通过重载运算符,
使同一运算符能根据不同的运算对象完成不
同的操作。运算符的重载也体现了OOP技术
的多态性。
7.2本章知识目标
本章讲解多态的特性之一运算符的重载,
读者学习本章应该掌握住以下知识点:
1、了解运算符重载的概念与规则。
2、掌握运算符重载为类的成员函数和友元函
数两种方式,熟悉两种方式的区别,能熟练
编写相应的程序。
3、学会流插入和流提取运算符以及前置和后
置自增自减运算符的重载。
4、了解转换函数的概念及使用方法。
7.3本章知识点精讲
7.3.1运算符重载的概念与规则
1、运算符重载的概念
C++预定义的运算符只是对基本数据类型进行操作,
例如对于两个整型数a和b,可以完成couta+b的操
作,得到加和以后的值,实际上,加法的功能是通
过函数来实现的,在编译系统内部存在着一个这样
的函数:
operator+(a,b);
当程序中出现两个整数相加的情况时,编译系统会
自动调用这个函数,在编译系统内部存在着很多以
operator+命名的函数例如:
intoperator+(int,int);
doubleoperator+(double,double);
doubleoperator+(int,double);
……………..
从本质上说,编程者进行运算符重载的方
法就是要编写一个以“operator运算符号”
为函数名的运算符函数,该函数定义了重载
的运算符将要执行的操作,函数的形参类型
必须是自定义的类型。当使用该运算符对形
参规定的数据类型进行运算时,就执行函数
体中的操作,而不再是原运算符的操作了。
2、运算符重载的规则
C++中的运算符具有特定的语法规则,运算符重
载时也要遵守一定的规则,这些规则是:
⑴C++中的运算符除了几个不能重载外,其它的
都能重载,而且只能重载已有的运算符,不能
自己创造运算符。不能重载的运算符是:“•”,
“*”、“∷”、“sizeof”和“?:”。
⑵重载以后运算符的优先级和结合性都不能改变,
语法结构也不能改变,即单目运算符只能重载
为单目运算符,多目运算符只能重载为多目运
算符。
⑶运算符重载以后的功能应与原有功能类似,含
义必须清楚,不能有二义性。
7.3.2运算符重载为类的成员函数
将运算符重载为它将要操作的类的成员函数,称为成
员运算符函数。实际使用时,总是通过该类的某个对
象访问重载的运算符。
1、成员运算符重载函数的定义
在类内声明的一般形式为:
返回类型operator运算符(参数表);
在类外定义的一般形式为:
返回类型类名∷operator运算符(参数表)
{
函数体
}
其中,operator是定义运算符重载函数的关键字;运算
符是要重载的运算符的名称;参数表给出重载运算符
所需要的参数和类型。
例7-1设计一个学生类student,包括姓名和C++课程成绩,利用类的成员函数重载运算符”+“,使得对类
对象的直接相加就是对成绩的相加。
#includeiostream.h
#includestring.h
classstudent{
charname[10];
intsco;
public:
student(){}
student(charna[],intsc)
{
strcpy(name,na);
sco=sc;
}
studentoperator+(students)//运算符重载函数
{
studentst;
st.sco=sco+s.sco;
returnst;
}
voiddisp(){
cout成绩为scoendl;}
};
voidmain()
{
students1(Jerry,100),s2(flora,75),s3;
s3=s1+s2;
s3.disp(