C++对C的扩充、_第1页
C++对C的扩充、_第2页
C++对C的扩充、_第3页
C++对C的扩充、_第4页
C++对C的扩充、_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+ 面向对象程序设计西华大学 黄襄念l课程简介(课程简介(OOP)l课程任务与要求课程任务与要求l推荐教材推荐教材l软件开发流程与 IDE 简介lC 语言选择性回顾l从 C 到 C+l最简单的 C+ 程序lC+ 对 C 的扩充C+ 面向对象程序设计西华大学 黄襄念l 先进开发技术,众多流行开发系统采用先进开发技术,众多流行开发系统采用VB & VBScript, VC+, Delphi, C+Builder,Java, JavaScript, PowerBuilder, ActionScript,., etc.l 面向过程程序设计的缺陷(例如面向过程程序设计的缺陷(例如C语言)语言)

2、模块(函数或子程)的堆砌,就象由零件直接装配整机,零件很多,本身又不能独立工作,零件彼此关联,协同工作,造成很多的问题,牵一发而动全身,无法克服软件危机。C+ 面向对象程序设计西华大学 黄襄念l掌握 DOS 字符界面下的 OOPl掌握 Windows 图形界面下的 OOP了解 Windows 消息驱动机制了解 Windows DLL 与 API(高级技术)掌握 VC+ 各种常用控件的使用l仅靠课堂学习和集中上机实验远远不够!仅靠课堂学习和集中上机实验远远不够! 只有充分利用课余时间,加强动手实验,只有充分利用课余时间,加强动手实验, 才能真正掌握本领,学到技能。才能真正掌握本领,学到技能。C+

3、 面向对象程序设计西华大学 黄襄念l教材:教材: 谭浩强. C+面向对象程序设计. 清华大学 出版社, 2006.01 (规划教材)C+ 面向对象程序设计西华大学 黄襄念软件开发流程.cpp 源程序,文本文件.obj 目标程序,二进制文件.exe 执行程序,二进制文件设计解决问题的算法步骤程序结构设计,数据结构选择语法错误逻辑错误设计各种测试数据学习掌握相关领域的知识C+ 面向对象程序设计西华大学 黄襄念lIDE(集成开发环境) 简介大型开发系统都有自己的IDE.将源文件的编辑、编译、连接、调试、运行集成在一个工作环境内,方便软件开发。集成开发环境具有强大的调试功能和工具,一定要掌握常用的调试

4、手段,尽可能提高 软件开发效率。提供常用的编程控件供选用。提供强大的联机帮助系统,掌握其使用。C+ 面向对象程序设计西华大学 黄襄念l字符内码(计算机内部的存储编码)一切信息在计算机内部均是以01串(位串/比特串)形式存储。包括图形、图像、影视、文本.等等。按存储格式,字符分为单字节和双字节字符。ASCII 编码:美国信息交换标准代码。它用于存储:英文字母、数字、其他专用字符。用 8 位来存储,可存储 28 = 256个单字节字符。汉字数量众多,GB2312-80两级字库共有6000多个汉字,新标准有上万汉字。因此,用双字节存储。C+ 面向对象程序设计西华大学 黄襄念整型变量在软件开发中用的很

5、多,它的表示范围由编译系统确定,并不断的扩大范围。可用运算符 sizeof(int) 测试其字节数。特别注意大整数的范围是否越界。如18位身份证编号。sizeof(类型名) 或 sizeof(变量名) int x; coutsizeof(int); coutsizeof(x);整型比字符串表示更有优势:因整数是一个数值,可参与各种数学运算。常用整型:2字节、4字节、64位整型。整型分为带符号和无符号整型。C+ 面向对象程序设计西华大学 黄襄念ltypedef 类型定义声明自定义类型有:数组、枚举、结构、联合、类等类型,它是基本类型的组合类型。typedef 给已有类型取一个别名,以提高程序可读

6、性。如用短名字代替长名字。 typedef double Area, Volume ; typedef int Natural ; Natural k , m ; Area s ; Volume v ;C+ 面向对象程序设计西华大学 黄襄念l枚举常量:enum 关键字定义对仅有几个有限取值的数据可考虑定义为枚举。如:星期1星期日,星期8就是非法的,用枚举便于检查数据取值的合法性。枚举元素一般用大写表示。enum weekday SUN, MON, TUE, WED, THU, FRI, SAT ; 枚举元素的默认值:SUN为0, MON为1, ., SAT为6。 在声明时可另外定义默认值: e

7、num weekday SUN=7, MON=1, TUE, WED, THU, FRI, SAT ; 枚举元素是常量,不能重新赋值,可参与运算。 枚举元素名为符号常量如SUN,程序中可直接使用。C+ 面向对象程序设计西华大学 黄襄念l结构体:struct 关键字定义将不同的数据类型结合在一起。如一个学生的信息:学号,姓名,性别,身高等。struct student /结构可嵌套定义 unsigned long ID ; char name20; bool sex ; float height ; stu= 20020011, ”黎明”, true, 1.80 ; student stu1,

8、stu2100, *p_stu; /结构变量cout sizeof(student) ;cout stu.ID ;cout stu24.sex ;cout ID ;定义时结构体时内部不允许初始化C+ 面向对象程序设计西华大学 黄襄念l局部变量在语句块内、函数体内定义的变量,只存在于定义它的语句块或函数体内。执行到该范围内时,变量才创建(分配内存),离开该范围后局部变量被自动删除。l全局变量在语句块和函数体外面定义的变量,它存在于该源文件范围内,即该源文件各处均可访问。程序运行完毕退出时,才被删除。C+ 面向对象程序设计西华大学 黄襄念l外部变量:extern 关键字声明较大型软件往往由多个源文

9、件编译连接而成,源文件 A.c 中定义的全局变量 x,另一源文件B.c 也要使用变量 x,在 B.cpp 中可用 extern声明变量 x 为外部变量,告诉系统:它是其他源文件中定义的变量。/ A.c / B.cint x=2; extern int x ;为了避免重复定义,通常在一个源文件中定义全部全局变量,其他源文件中用extern声明。C+ 面向对象程序设计西华大学 黄襄念lstatic 关键字声明变量声明全局变量: static int x ; /x是全局变量 表示:该变量对其他源文件不可见。该变量对其他源文件不可见。避免在多文件 包含时产生变量重复定义的语法错误。多个源文件 定义有同

10、名的全局变量(容易发生的事情)。声明局部变量: int myfun(static int x=0) ; 编译时就给x分配内存,存在于程序的整个生存期: 程序运行时就存在,程序退出时才被删除。生存期 与全局变量相同,访问限制与局部变量相同。全局 寿命,局部可用。只第一次进入函数时被初始化。C+ 面向对象程序设计西华大学 黄襄念l由多个源文件组成的 C 程序:程序结构:(三个部分组成) 函数声明,函数实现,主函数。单元文件:(可用#include包含) 较大规模程序往往由多个源文件组成,每个 源文件作为一个单独编译的单元,因此称为 单元文件。对不同文件可单独编写、编译, 最后连接。一个程序通常至少

11、分为3个文件 函数声明(.h)、函数实现(.c)、主函数(.c)C+ 面向对象程序设计西华大学 黄襄念 函数实现文件#include “fun.h”.fun.h 函数声明文件#include .#include “fun.h”.work.objfun.objwork.exe编译编译连接如果修改了函数实现,调用文件不用修改,不重新编译C+ 面向对象程序设计西华大学 黄襄念l工程文件(项目文件)编译系统对多文件的组织管理,用工程文件。最后生成的 exe 执行文件与工程文件名相同。l内置函数的特殊性对于多文件程序,内置函数要求在每一个调用它的单元文件中都给出其实现。因此,较好的做法是:将内置函数的实

12、现写在头文件中,供调用它的单元文件包含这个头文件。C+ 面向对象程序设计西华大学 黄襄念l某些程序段需满足给定条件才参与编译 形式 1 #if 条件 /条件:常量表达式 程序段 ; /条件成立,编译本段程序 #endif 如果条件不成立,不编译本段程序,最后的 EXE 文件中没有本段程序的执行代码。 常用于调试程序,“程序段”为调试用语句, 发行版将 “条件” 改为假,去掉调试语句段。C+ 面向对象程序设计西华大学 黄襄念 形式 2#if 条件 /条件:常量表达式 程序段1 ; /条件成立,编译程序段1#else 程序段2 ; /条件不成立,编译程序段2#endif注意:编译预处理命令(非语句

13、,前面有符号#)末尾都没有分号 “ ; ” 。C+ 面向对象程序设计西华大学 黄襄念 形式 3#ifdef 符号 /符号:由 #define 定义 程序段1 ; /符号已定义:编译本段#else 程序段2 ; /符号未定义,编译本段#endif同样,如果没有程序段2,#else 可省略。与形式1和形式2比较:把条件改为符号更简略,只需#define定义符号,无需取值。如:#define debugC+ 面向对象程序设计西华大学 黄襄念 形式 4(与形式 3 相反)#ifndef 符号 /符号:由 #define 定义 程序段1 ; /符号未定义:编译本段#else /#else 段可省略 程序

14、段2 ; /符号已定义,编译本段#endif说明:由 #define 定义的符号,可用 #undef 删除。如: #define debug #undef debug /debug 并未定义C+ 面向对象程序设计西华大学 黄襄念 “unit1.h”#include “unit2.h”int main()./unit1.h#include “head.h”./unit2.h#include “head.h”./head.hint x ; /全局变量.编译出错:head.h被包含两次,导致变量x 被重复定义,语法错。/head.h 改写头文件#ifndef HEAD_H #define HEAD_

15、H int x ;#endif 四个文件组成的程序C+ 面向对象程序设计西华大学 黄襄念lC语言是面向过程的lC+是面向对象和面向过程的混合型语言lC+由C发展而来,兼容C,是C的超级l面向过程与面向对象并非对立面向对象程序设计中仍然要用到面向过程的 程序设计技术。例如,类成员函数的定义。对于简单问题,直接用面向过程方法就可以轻松解决。C+ 面向对象程序设计西华大学 黄襄念例:输出一行字符例:输出一行字符 This is a C+ program.#include /cout需要的头文件using namespace std; /库函数用命名空间stdint main() /某些操作系统要求主

16、函数返回int /输出流对象cout,插入流操作符 cout “This is a C+ program.n”; return 0; /正常结束返回0程序运行时输出:/行注释,/*.*/块注释This is a C+ program.系统头文件用系统头文件用存放于系统文件夹存放于系统文件夹用户头文件用用户头文件用“ ”存放于用户文件夹存放于用户文件夹C+ 面向对象程序设计西华大学 黄襄念例:求例:求a和和b两个数之和两个数之和#include using namespace std;int main() int a, b, sum; /定义变量 cinab; /输入流对象cin,流提取符 /多

17、个变量之间用空格分隔 sum = a+b; cout“a+b=”sumendl; /endl与n相同 return 0; cin 键盘输入cout 屏幕输出C+ 面向对象程序设计西华大学 黄襄念#include using namespace std;int max(int, int); /函数声明int main() int a, b, c; cinab; c=max(a, b); cout“max=”cy) z=x; else z=y; return z;如果声明函数较多,则放入自编头文件中C+ 面向对象程序设计西华大学 黄襄念lC+为了与为了与C兼容,保留了兼容,保留了C的一些规定的一些

18、规定C包含头文件时,用.h为扩展名如iostream.h, string.h,math.h等。C+包含头文件时不带扩展名如 iostream, string, cmath。为兼容,两者可并存。另外,C+允许头文件扩展名 为 .hpp C无命名空间,using namespace std 略。C不要求main函数返回int,可略或为void型, 相应地 return 0 略去。C+ 面向对象程序设计西华大学 黄襄念lC+输入输出:输入输出:cin 与与 cout C+为方便用户,除可用printf, scanf等函数进行输入输出外,还提供cin和cout流对象。cout与一起使用,将后面数据输出

19、到标准输出设备(屏幕)上。cout=console output用“n”实现换行,或者用iostream.h中定义的符号 endl(end of line)实现换行。可用多个实现多个数据项按从左向右从左向右顺序输出:coutabcendl;C+ 面向对象程序设计西华大学 黄襄念每个输出项要用一个符号,不能多个项目共用一个如:couta, b, c ;(错误)不指定输出数据类型,系统按默认格式输出 float a=3.45; int b=5; char c=A; cout“a=”a“,”“b=”b“,” “c=”cendl; 输出结果:a=3.45,b=5,c=A格式输出在第七章讲述格式输出在第

20、七章讲述C+ 面向对象程序设计西华大学 黄襄念用iomanip.h定义的符号setw(n)设定输出 数据项的宽度为n。如setw(5):为其后一个其后一个输出项设定5个字符的输出宽度。若该输出项不足5列宽,则右边对齐右边对齐;若超过5列,则按实际宽度输出。上例改为: cout“a=”setw(5)aendl “b=”setw(5)bendl “c=”setw(5)c共同使用,将键入数据输入到后面一个数据项中。可用多个实现多个数据项按从左向右从左向右顺序输入:cinabc; 键入时用空格分隔各个输入数据项。键入时用空格分隔各个输入数据项。每个输入项用一个符号,不能够多个项目共用一个如:cina,

21、 b, c ;(错误)C+为输入输出流提供了详细的格式控制,包括精度控制,进制转换等,详见第七章。C+ 面向对象程序设计西华大学 黄襄念lC语言 #define(宏替换)命令#define PI 3.14159 /宏命令后面无分号编译时,将程序中 PI 替换为字符串字符串 3.14159不作类型检查,即不检查 PI 取值的合法性。int a=1, b=2;#define PI 3.14159#define R (a+b)cout PI*R*R endl;编译时替换为:3.14159*(a+b)*(a+b)PI不是变量,无类型,不占内存单元,不能用指针指向它。C+ 面向对象程序设计西华大学 黄襄

22、念lC+ 用 const 定义常量取代 #defineconst float PI = 3.14159 ; 常量(常变量)具有变量性质,有数据类型,占有内存单元,有内存地址,可用指针指向。程序运行时,它的值不能被改变即不能对它重新赋值,否则编译出错,不能通过编译。const 用法很广,可与指针、对象、函数等结合,将在后面第三章讲述。C+ 面向对象程序设计西华大学 黄襄念lC 语言函数声明函数被调用前,必须进行声明。系统的库函数在相应的头文件中声明(用#include包含)。声明规则,C 没有强制规定没有强制规定,以下均合法:int max(int x , int y) ; /函数原型(推荐)i

23、nt max() ; /省略函数参数max() ; /省略整型返回值类型和参数缺点:除函数原型声明外,其他声明方式不便于编译时作合法性检查(参数类型和个数)。C+ 面向对象程序设计西华大学 黄襄念lC+函数声明规定:必须用函数原型进行声明。函数原型的两种形式:int max(int x , int y) ; int max(int , int ) ; /省略参数名编译时检查:函数返回值类型、参数个数、参数类型。如果不能正确匹配,给出语法错误,供程序员及早发现错误所在。C+ 面向对象程序设计西华大学 黄襄念l函数重载(Overloading)两个以上函数的函数名相同函数名相同,参数个数或参数类型

24、必须不全相同函数重载。int add(int x , int y); /整型加法float add(float x , float y); /浮点加法long add(long x , long y); /长整型加法l函数重载的意义用同一函数名完成不同数据的相同操作,不用记忆更多的函数名字。C+ 面向对象程序设计西华大学 黄襄念 例:一个函数求2个或3个整数的最大值#include using namespace std;int max(int , int , int);int max(int , int);int main() int a=7, b=-4, c=9; coutmax(a,b,

25、c)endl; coutmax(a,b)a) a=b; if (ca) a=c; return a; int max(int a, int b) if (ab) return a; else return b; C+ 面向对象程序设计西华大学 黄襄念 函数重载实现了一个函数名多用,但对于 函数体完全相同函数体完全相同的重载函数仍需分别实现 例如:int max(int a, int b) float max(float c, float d) if (ab) return a; if (cd) return c; else return b; else return d; 改进改进:用一个函数

26、实现,简化编程,提高效率。C+ 面向对象程序设计西华大学 黄襄念l函数模板的应用场合凡是函数体相同的函数,均可定义函数模板,不必定义多个函数。(参数个数相同)l函数模板的定义因函数体相同的函数,其参数类型不同,因此用一个虚类型T定义。调用函数时,系统根据实参类型来取代函数模板中的虚类型。上例: template T max(T a, T b) ;其中, typename也可用class,两者等价。根据需要根据需要,T 可定义若干个可定义若干个template C+ 面向对象程序设计西华大学 黄襄念#include using namespace std;template T max(T a,

27、T b);int main() float c=5.2, d=8.5, m; m=max(c, d); coutm; return 0; template T max(T a, T b) if (ab) return a; else return b;函数调用时,编译器根据实参类型,确定T的类型。C+ 面向对象程序设计西华大学 黄襄念l参数传递:实参形参。带默认值形参, 调用时可不给出实参,而使用默认值。函数声明: float area(float r = 6.5); 函数调用1:area(); /等价于area(6.5);函数调用2:area(7.5); /取代默认值l带多个默认值形参的规则

28、:void F1(int a, int b=0, int c, int d=2); /错误void F2(int a, int c, int b=0, int d=2); /正确规则:带默认值形参必须从右边开始连续放。规则:带默认值形参必须从右边开始连续放。C+ 面向对象程序设计西华大学 黄襄念l带默认值形参的语法规则:函数声明时给出形参默认值函数声明时给出形参默认值,函数定义时可不给出。如果两处都给了,以先给的为准。某些编译器不允许重复给出,认为语法错。 编译过程从上向下逐行编译,调用时遇到缺省参数 形参,认为实参与形参个数不匹配而报错。带默认值形参的函数重载时,容易出错带默认值形参的函数重

29、载时,容易出错 因为调用重载函数时,根据参数类型或个数信息来决定调用哪个重载函数。若参数缺省,系统不知道调用哪个重载函数,产生二义性。C+ 面向对象程序设计西华大学 黄襄念l引用(Reference)的概念变量的引用又称为变量的别名(alias)。 int a ; int &b = a ; / b 是 a 的引用(别名)b 与 a 是同一个变量,使用同一内存单元。引用不是一个独立变量。内存单元ab变量与引用内存单元a内存单元c独立变量C+ 面向对象程序设计西华大学 黄襄念声明引用时,必须指定它代表哪个变量: int &b = a ; /正确,指定 b 代表 a 变量 int &

30、amp;b ; /错误,没指定代表的变量 float a , int &b = a; /错误,类型不匹配声明一个引用后,它一直与代表变量联系,在其作用域内,不能中途更换它所代表的 变量,例如: int &b = a ; int &b = c ; /错误,又代表另一个变量C+ 面向对象程序设计西华大学 黄襄念引用的引用:一个变量,多个别名 int a = 3 ; /定义 a 是整型变量并初始化 int& b = a ; /声明 b 是 a 的别名 int& c = b ; /声明 c 是引用 b 的别名 int& d = a ; /声明 d 是 a

31、 的别名3一个整型内存单元abcd整型变量所占内存的字节数:cout sizeof(int) ;由编译系统定义。C+ 面向对象程序设计西华大学 黄襄念引用符&与取地址操作符&的区分: int a = 3 ; /定义一个整型变量并初始化 int &b = a ; /&前有类型符(int),是引用 int *c = &a ; /&前无类型符,是取地址符 int *d ; /定义一个整型指针 d = &a ; /指向变量a,&是取地址符实际编程时,几乎不直接使用变量别名,而使用它的原名如a,那么引用究竟有何作用?回答:C+用它扩充函数的

32、参数传递。C+ 面向对象程序设计西华大学 黄襄念l变量名作为实参:单向值传递(实参形参)例:例:#include using namespace std ;void swap(int a , int b) int temp ; temp = a ; a = b ; b = temp ;int main() int i = 3 ; j = 5 ; swap(i, j) ; cout i “,” j ; return 0 ; 该程序不能实现实参值交该程序不能实现实参值交换换ijab实参形参形参与实参在不同的内存单元,形参变化,不影响实参C+ 面向对象程序设计西华大学 黄襄念l传递变量的指针:双向地

33、址传递 实参 形参例:例:#include using namespace std ;void swap(int *a , int *b) int temp ; temp = *a ; *a = *b ; *b = temp ;int main() int i = 3 ; j = 5 ; swap(&i , &j) ; cout i “,” j ; return 0 ; abij实参形参形参与实参的内存单元相同该程序实现:实参值交换该程序实现:实参值交换C+ 面向对象程序设计西华大学 黄襄念l传递变量的别名:双向引用传递例:例:#include using namespace

34、std ;void swap(int& a , int& b) int temp ; temp = a ; a = b ; b = temp ;int main() int i = 3 ; j = 5 ; swap(i, j) ; cout i “,” j ; return 0 ; 引用传递比地址传递的优点:1. 不定义指针变量,不涉及指针运算;2. 引用比指针更为直观、简便。C+ 面向对象程序设计西华大学 黄襄念l不能声明数组的引用int a4 = 1, 2, 3, 4 ;int& b = a ; / 错误l可以声明指针变量的引用,指针的别名int a = 5 ;in

35、t *p = &a ; / p是指向整型变量a的指针int * &b = p ; / b是指针p的引用,也是指针cout *b ;C+ 面向对象程序设计西华大学 黄襄念l可将引用的地址赋给指针,指向原变量int a = 3 ;int& b = a ; / b是a的别名,无自己的地址int *p = &b ; / 取b地址赋予指针p,p指向al常引用:const 限定引用值不能被修改int a = 3 ;const int &b = a ;a = 7 ; / a 可以改变b = 5 ; / 错误,b 不允许改变C+ 面向对象程序设计西华大学 黄襄念l可用常

36、量或表达式对引用初始化,但必须加上 const 关键字:int a = 5 ;const int& b=a+3 ; / const限定b不可改变编译器处理为:(生成一个临时变量temp)int temp = a+3 ;const int& b=temp;同理,可用不同类型的变量初始化引用:double d=3.1415; int temp=d; /类型转换const int& c = d ; const int& c=temp;C+ 面向对象程序设计西华大学 黄襄念l定义内置函数 (inline function)又称为内联函数、内嵌函数。定义内联函数很简单,在

37、函数定义前面加上 inline 即可。#include using namespace std ;inline int max(int a, int b) if (ba) return b ; else return a ;int main() int i=5, k=8, n; n = max(i, k); cout n ;C+ 面向对象程序设计西华大学 黄襄念l内置函数是如何工作的非内置函数的调用过程 保存调用处的现场(下一条指令地址,各个寄存器状态等),实参进栈,实参与形参相结合完成参数传递,进入被调用函数体执行,执行完毕后,返回调用处。内置函数在形式上是函数(定义和调用),编译时将函数体

38、嵌入调用处,不产生函数调用,节约了时空开销,提高了执行效率。C+ 面向对象程序设计西华大学 黄襄念l内置函数的使用场合和语法规则需要频繁调用、功能简单、规模较小的函数可定义为内置函数,以提高其执行效率。inline只是一个请求,编译器不保证将其编译为内置函数,若编译器认为该函数过于复杂,仍将其编译为普通函数(非内置)。内置函数体内不能有循环语句和switch语句。内置函数的定义必须出现在内置函数第一次被调用之前。因为编译是从上向下进行的,否则,找不到内置函数的已编译代码。C+ 面向对象程序设计西华大学 黄襄念lC语言的宏函数:(很常见,包括一些系统函数)形式上象函数的宏替换,而非函数。#inc

39、lude using namespace std ;#define myPower(x) x*x /形式上象函数int main() coutmyPower(2)“,” ; /结果:4 coutmyPower(1+1) ; /结果:3 错原因:myPower(1+1) 1+1*1+1=3改正:#define myPower(x) (x)*(x)C+ 面向对象程序设计西华大学 黄襄念l内置函数与宏函数的比较:宏函数只是简单替换,不作“参数”的运算和类型检查,程序容易出现逻辑错误。内置函数避免了宏函数的问题,推荐采用。内置函数提高了程序的执行效率,但增加了程序目标代码的长度。 比如:某个内置函数需

40、要调用10次,编译时 将该函数的代码复制插入到每一个调用处, 为此,增加了目标代码长度。C+ 面向对象程序设计西华大学 黄襄念l作用域符号: 域名:域成员名(变量或函数)全局变量与局部变量同名:#include /using namespace std ; /cout定义在std域float a=13.5 ;int main() int a=5; /局部屏蔽全局 std:cout a endl ; /输出局部变量a 13.5 std:cout :a ; /输出全局变量a 5 return 0 ; /:前域名省略表示全局C+ 面向对象程序设计西华大学 黄襄念lC 仅有字符char类型,无字符串类

41、型为此,只能定义字符数组来存放字符串,使用系统提供的字符处理函数来处理字符串,如:strcpy(复制),strcat(连接),strcmp(比较),strlen(长度)等,它们的完整使用查联机帮助。字符串操作,是软件开发中最为常用的技术,需很好地、全面地掌握它们的各种使用方法。使用上述函数需 #include ,联机帮助说明了每个函数需要包含的头文件。C+ 面向对象程序设计西华大学 黄襄念lC+ 增加 string 类类型处理字符串:使用 string 时需 #include 定义字符串变量:(实质上是对象) string str1 ; string str2 = “china” ; /定义同

42、时初始化对字符串变量赋值: string str1, str2; char str310; str1= “China” ; /对,且不用指明长度 str3= “China” ; /错,数组不能这样赋值C+ 面向对象程序设计西华大学 黄襄念str2 = “Hi” ;str2 = str1 ; /两个字符串相互赋值,即使str2 /原来长度为2也无妨,因为长度 /随字符串长度的改变而改变。str23=0 ; /操作单个字符:ChinaChi / 0 是字符串结束标志cout str2 ; /输出字符串cout str2 ; /键入字符串C+ 面向对象程序设计西华大学 黄襄念l字符串变量的运算:复制

43、:赋值实现(=) strcpy(.) str2 = str1; /等价:strcpy(str2, str1);连接:加法实现(+) strcat(.) string str1 = “C+ ”, str2 = “Language” ; str1 = str1 + str2 ; /输出:C+ Language比较:关系运算符实现 strcmp(.) = = = 其他:成员函数或成员变量实现C+ 面向对象程序设计西华大学 黄襄念#include #include using namespace std ;string name3 ; /定义个字符串数组,未初始化string name3 = “Zhang”, “Li”, “Zhao” ;cout sizeof(string) endl ; /4 bytescout sizeof(name) ; /3*4=12cout name2 ; name2name1name0首地址首地址首地址ZhaoLiZhang字符串数组的内存格式C+ 面向对象程序设计西华大学 黄襄念l内存的动态分配与释放程序需要时分配一定大小的内存块供使用,使用完毕后释放已经分配的内存块,以节省程序运行所需的内存大小。(好的风格)程序运行时才能确定数组的元素个数,如果预先固定分配,其大小难以掌握。C 语言用 mal

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论