文档详情

运算符重载 课件 .pdf

发布:2024-12-21约8.61千字共26页下载文档
文本预览下载声明

第七章运算符重载

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(

显示全部
相似文档