《数据结构c++.ppt》由会员分享,可在线阅读,更多相关《数据结构c++.ppt(60页珍藏版)》请在第壹文秘上搜索。
1、1nC+语言的概要语言的概要n类、对象、构造函数与析构函数类、对象、构造函数与析构函数n输入输入/ /输出输出n函数、参数传递与函数返回值函数、参数传递与函数返回值n函数名重载与操作符重载函数名重载与操作符重载n动态存储分配动态存储分配n友元函数与内联函数友元函数与内联函数n结构、联合与类结构、联合与类2的的3nC 语言是一个面向过程的语言语言是一个面向过程的语言。随着软件。随着软件开发技术的进步开发技术的进步, 程序员们最终发现程序员们最终发现, 把把数据和施加在其上的操作结合起来数据和施加在其上的操作结合起来,会得,会得到更易于理解的程序,由此产生了面向对到更易于理解的程序,由此产生了面向
2、对象的程序设计思想。象的程序设计思想。n1980年代初,美国年代初,美国 AT & T 贝尔实验室的贝尔实验室的Bjarne Stroustrup设计并实现了设计并实现了C语言语言的扩充、改进版本,的扩充、改进版本,C+语言诞生了!语言诞生了!nC+改进了改进了C的不足之处的不足之处,增加了对面向增加了对面向对象的程序设计的支持对象的程序设计的支持,。4/#include using namespace std;int main() cout hello!;return 0;5。注释开始。注释开始于于“/*”,结束于,结束于“*/” 。n行注释符以行注释符以“/”开头。开头。6nC+将一些标准
3、函数和变量说明放在头文将一些标准函数和变量说明放在头文件中。件中。n用户也可以定义自己的头文件。用户也可以定义自己的头文件。7nC+源程序中还可包括各种编译命令源程序中还可包括各种编译命令, 这些这些命令被称为预处理指令命令被称为预处理指令, 常用的除常用的除 #include外外, 还有条件预处理指令还有条件预处理指令 #if、#ifndef 和和#endif 等和宏替换指令等和宏替换指令 #define。8n#define 用来定义一个常量或替换宏用来定义一个常量或替换宏, 如:如: #define size 20 /定义一个常量定义一个常量size,其值永远为,其值永远为20 #defi
4、ne MAX(x, y) (x y) ? y : x) /求求x, y中的最大值中的最大值n经过预编译后经过预编译后, 程序中所有出现程序中所有出现 size 和和 MAX(x, y) 之处都会被之处都会被 20 和和 (x y) ? y : x) 代替,如:代替,如: int arraysize; int i = MAX(4, 55);n经预编译后会变为经预编译后会变为 int array20;int i = (4 ( const Point &); /点比较 int operator ( istream&, Point& ); /输入友元函数 friend ostream& operato
5、r ( ostream&, const Point& ); /输出友元函数;#endif 17例,对于例,对于Point类的输出类的输出友元友元函数的实现可以函数的实现可以在源程序文件中给出,形为:在源程序文件中给出,形为: ostream & operator (ostream& strm, const Point& p) return strm ( p.x , p.y ); 这个函数把点这个函数把点p的值以的值以“x, y”的格式送到的格式送到strm指明的输出流中去。指明的输出流中去。18C+中的对象中的对象n建立类的对象建立类的对象(亦称为亦称为实例化实例化)时采用的方式时采用的方式类
6、似于定义类似于定义C变量的方式,可以变量的方式,可以自动地自动地,或,或静态地静态地, 或通过或通过动态分配动态分配来建立。建立一个来建立。建立一个 Point类实例的语句是:类实例的语句是:uPoint p (6, 3); 自动地自动地uPoint q; 自动地自动地ustatic Point s (3, 4); 静态地静态地uPoint *t = new Point(1, 1); 通过动态分配19构造函数构造函数n当遇到以上的每一个语句时当遇到以上的每一个语句时, 将隐式地调用将隐式地调用一个构造一个构造(constructor)函数函数, 这个构造函这个构造函数属于一个与它同名的类。数属
7、于一个与它同名的类。n在在Point类的定义中声明了两个构造函数类的定义中声明了两个构造函数, 构构造函数的参数用于初始化表达式的值。造函数的参数用于初始化表达式的值。n例如例如, 当使用声明当使用声明 Point p(6, 3) 建立建立 Point 类的对象类的对象 p 时时,调用了构造函数调用了构造函数 Point (int, int);通过以下函数定义通过以下函数定义, 将其将其x, y分量设定分量设定为为6, 3: Point : Point (int a,int b) x = a; y = b; Point : Point (int a,int b) : x(a), y(b) 20
8、n构造函数可以定义默认值。例如构造函数可以定义默认值。例如 Point : Point ( int a, int b ) : x(a), y(b) n当定义实例时给定初始值当定义实例时给定初始值, 则该实例以给则该实例以给定初始值来初始化其数据成员定初始值来初始化其数据成员 Point p(6, 3); 则有则有 x = a = 6, y = b = 3n当定义实例时未给出初始值。则该实例当定义实例时未给出初始值。则该实例以默认值来初始化其数据成员以默认值来初始化其数据成员 Point q; 则有则有 x = a = 0, y = b = 021析构函数析构函数n当要放弃对象时当要放弃对象时,
9、 需需隐式地隐式地调用另一个函数调用另一个函数,叫做叫做析构析构(destructor)函数函数, 它属于名字相同它属于名字相同的类的类, 但在名字前面加上了一个但在名字前面加上了一个“”。例。例如如 Point。n为一个类可定义几个构造函数,但只能定义为一个类可定义几个构造函数,但只能定义 一个析构函数。当控制要退出自动变量的作一个析构函数。当控制要退出自动变量的作用域时用域时, 或当通过或当通过 delete 命令释放一个动命令释放一个动态分配的变量时态分配的变量时, 就要调用析构函数。当就要调用析构函数。当main函数执行结束时,将释放静态声明的函数执行结束时,将释放静态声明的变量。变量
10、。n一个析构函数用于一个析构函数用于在删除一个类的对象在删除一个类的对象时做时做清除工作。清除工作。22C+的输入的输入/ /输出输出n在在C+中执行输入中执行输入/输出操作输出操作, 需用需用#include预处理指令包括一个预处理指令包括一个头文件。头文件。用它可支持用它可支持C+的流的流(stream)操作。操作。n“流流”是个简单的字符序列。在是个简单的字符序列。在C+中有两中有两个预定义的类个预定义的类istream和和ostream,它们定,它们定义了输入流和输出流。义了输入流和输出流。n基本输入基本输入/输出方式:输出方式:u键盘屏幕输入键盘屏幕输入/输出输出u文件输入文件输入/
11、输出输出23键盘屏幕输入键盘屏幕输入/ /输出输出n在在C中有用于定向到键盘输入设备、屏幕输中有用于定向到键盘输入设备、屏幕输出设备和错误文件的命令出设备和错误文件的命令stdin、stdout和和stderr。n在在C+中用中用cin,cout和和cerr来定义键盘输入来定义键盘输入类、屏幕输出类和错误信息输出类。类、屏幕输出类和错误信息输出类。n操作符操作符 用于写出类用于写出类ostream的一个对象,的一个对象,对于一系列输出对象,可用对于一系列输出对象,可用 用于读入类用于读入类istream的一个对象的一个对象。24n在下面程序中使用了流在下面程序中使用了流 cin ,相继从标准,
12、相继从标准输入设备上输入两个整型变量输入设备上输入两个整型变量a和和b, 并将它并将它们打印到标准输出设备上。们打印到标准输出设备上。n在输出语句中最后输出的在输出语句中最后输出的endl是是C+的的I/O操操作符作符, 它的用途是输出一个换行符并清空流。它的用途是输出一个换行符并清空流。#include int main ( ) int a, b; cin a b; cout “a : ” n “f : ” f endl; return 0;25文件输入文件输入/ /输出输出nC+中的文件输入中的文件输入/输出方式如下所示。输出方式如下所示。n在程序开头必须用预处理指令在程序开头必须用预处理
13、指令#include包包含头文件含头文件,它定义了类,它定义了类ifstream、ofstream和和fstream。n要创建一个要创建一个输入流输入流, 必须声明它为必须声明它为ifstream类的实例类的实例n要创建一个要创建一个输出流输出流, 必须声明它为必须声明它为ofstream类的实例类的实例n执行输入和输出操作的流执行输入和输出操作的流必须声明它为必须声明它为 fstream类的实例类的实例26#include #include #include int main ( ) ifstream inFile; / inFile为输入流对象 ofstream outFile; / ou
14、tFile为输出流对象 outFile.open (my.dat, ios : out ); / 建立输出文件my.dat char univ = Tsinghua, name10; int course = 2401, number; outFile univ course endl; / 输出到my.dat27 inFile.open(my.dat, ios:in); /打开输入文件my.dat if ( !inFile ) cerr “不能打开my.dat” name number; cout name: name endl; cout number: number endl; retu
15、rn 0;28n在文件打开的操作中,指定的文件模式有在文件打开的操作中,指定的文件模式有以下几种:以下几种:uios:app:把所有对文件的输出添加在:把所有对文件的输出添加在文件尾。它只用于输出文件。文件尾。它只用于输出文件。uios:binary:文件以二进制方式打开。:文件以二进制方式打开。此项缺省时文件以文本方式打开此项缺省时文件以文本方式打开。uios:nocreate:若文件不存在则将导致:若文件不存在则将导致打开操作失败。打开操作失败。uios:out:表明该文件用于输出。此项可:表明该文件用于输出。此项可缺省。缺省。uios:in:表明该文件用于输入。此项可:表明该文件用于输入
16、。此项可缺省。缺省。29C+中的函数中的函数 n在在C+中有两种函数:中有两种函数: 常规函数常规函数和和成员函数成员函数n不论哪种函数不论哪种函数, 其定义都包括其定义都包括 4 个部分个部分: 函函数名数名、形式参数表形式参数表、返回类型返回类型和和函数体函数体。30n函数返回时可以通过引用方式,参看下面函数返回时可以通过引用方式,参看下面程序程序, 此时在函数类型后面加上一此时在函数类型后面加上一 个个“&”。 #include char& replace(int m);char s80 = “Hello There”;main ( ) replace(5) = x; cout s; /用x代替Hello后面的空格char& replace ( int m ) return sm; 31C+中的参数传递中的参数传递n函数调用时传送给形参表的实参必须与形函数调用时传送给形参表的实参必须与形参在类型、个数、顺序上保持一致。参在类型、个数、顺序上保持一致。n参数传递有两种方式。一种是参数传递有两种方式。一种是传值传值,这是,这是缺省的参数传递方式缺省的参数传递方式; 一种是一种是引用类