1 / 77
文档名称:

c 课件实用教案.ppt

格式:ppt   大小:975KB   页数:77页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

c 课件实用教案.ppt

上传人:wz_198613 2021/12/11 文件大小:975 KB

下载得到文件列表

c 课件实用教案.ppt

相关文档

文档介绍

文档介绍:本章(běn zhānɡ)要点:
教学目标
本章主要介绍类的静态成员以及友元的问题。掌握静态数据成员和静态成员函数的使用,友元函数和友元类的添加。
教学重点和难点
◆ 什么是运算符重载(zhònɡ zǎi)
◆ 一元运算符的重载(zhònɡ zǎi)
◆ 二元运算符的重载(zhònɡ zǎi)
◆ 通过友元函数实现重载(zhònɡ zǎi)
◆ 输出、输入运算符的重载(zhònɡ zǎi)
第1页/共76页
第一页,共77页。
在前面学****类和对象的时候,我们明确了这样一个概念:定义一个类就是定义一种新类型。因此,对象和变量一样,可以作为函数的参数传递,可以作为函数的返回值的类型,也可以说明对象数组,甚至(shènzhì)还可能有类类型的常量。
在基本数据类型上,系统提供了许多预定义的运算符,它们以一种简洁的方式工作。例如“+”运算符:
int x, y;
y = x + y;
表示两个整数相加,很简洁。但是,两个字符串合并:
char x[20], y[10]; //定义两个字符串类型
// ……
strcat(x,y);
表达起来就不如“y = x + y;”那样直观简洁。
因此,为了表达上的方便,希望已预定义的运算符,也可以在特定类的对象上以新的含义进行解释。如在string类对象x、y的环境下,运算符“+”能被解释为字符串x和y的合并。换言之,希望预定义运算符能被重载,让用户自定义的类也可以使用。
明确目标(mùbiāo):为什么要进行运算符重载
第2页/共76页
第二页,共77页。
C语言中有多种内置的数据类型,例如int、float、double和char等等。对应于每一种类型都有一系列的内置运算符,比如加法运算符“+”和乘法运算符“*”。就拿运算符 “+”来说吧,它可以用于int值,也可以用于float,虽然(suīrán)使用相同的运算符,但生成的代码不同,因为整数和浮点数在内存中的表示是不同的。这时,“+”运算符具有两种不同的解释(即实现代码)。也就是说,像“+”这样的运算符在C语言中已被重载。但是,C语言仅支持少量有限的运算符重载。C++语言对重载功能进行了扩充,也允许我们在自己定义的类上添加运算符,允许对已存在的预定义运算符由我们在不同的上下文中做出不同的解释。比如,经过运算符重载,我们可以直接对两个字符串string类对象进行加法运算
string x, y;
x = x + y;
可以直接输出复数类CComplex对象
Ccomplex c;
cout << c;
第3页/共76页
第三页,共77页。
通过运算符重载,程序代码就显得简洁明了,类对象的使用也方便了。这就是我们重载运算符的目的。第一个基本动作就这么简单,没问题吧?好了,如果第一关没问题,可以继续前进了。先看看下面这段话:
因为本书针对C++的入门读者,所以对一些深层次复杂的运算符重载,比如new和delete的重载以及类型转换等等不做介绍,以免倒了你的胃口。这里我们只介绍一下常用的运算符重载的实现,让大家明白运算符重载是怎么回事、如何实现,就算是完成任务了。如果想进一步学****复杂的高级的重载,可以参见(cānjiàn)别的参考书。
运算符重载函数可以作为类的成员函数,也可以作为类的友元函数来实现。下面对这两种不同的实现分别讲述。
第4页/共76页
第四页,共77页。
通俗地说,重载运算符就是在写函数,用这个运算符函数体对重载的运算符的含义做出新的解释。这里所解释的含义与重载该运算符的类有关,比如,字符串类重载的加运算符“+”,实际上是对两个字符串进行拼接(pīn jiē)。重载后的运算符还是按这些运算符的表达方式使用。例如,在一个string类中重载了运算符“+”为两个字符串的合并,我们可以这样写:
string s1, s2;
s1 = s1 + s2; //合并串s1和串s2,存放到新串s1中。
为了把运算符从头到脚地看个明明白白,我们创建一个新类:计数器类CCounter,逐步地根据需求来完善此类,并进一步地解释为什么要重载运算符以及如何来重载。
创建类CCounter,类CCounter的一个对象可以用来在循环中计数(感到惊奇吧),而且这个类的对象还可以用在其它程序中以实现数字递增、递减或跟踪一些值的地方。
以成员函数(hánshù)实现运算符重载
第5页/共76页
第五页,共77页。
//类Counter的简单定义及实现
#include <iostream>
using namespace std;
class CCounter
{
public:
CCounter() : m_val(0) { } //缺省构