1、第1章 C+语言概述程序设计语言的分类C+语言的发展历史机器语言 机器语言的语句是由0/1代码组成的。它与硬件紧密相关,是机器硬件惟一能识别的语言。使用机器语言进行程序设计的最大优点是可以获得高效的代码,因为它可以充分使用硬件的所有特性 代码由0/1组成,很难理解。用机器语言为一种机器硬件编写的程序很难应用到另一种机器上汇编语言 是一种使用助记符编写程序的语言,与机器语言相比从形式上相对简单易学 汇编语言并没有改变针对硬件进行程序设计的本质,汇编语言到机器语言的翻译十分容易,几乎是一一对应的关系。机器语言与汇编语言都是针对机器硬件的程序设计语言,通常称为低级语言。高级语言 与低级语言相比,高级
2、语言所使用的语句更加接近于自然语言,符合人类的记忆习惯,并且使用了人类语言中的某些语句来表述控制过程和程序结构,易学易用。需要一个翻译软件将高级语言的语句翻译成机器可以理解的指令才能够正确运行编译和解释 编译 在程序的所有源代码都编写完成之后,再用高级语言的编译程序将所有的源代码翻译成机器可以理解的指令 可以对翻译过来的机器指令进行整体的优化,解释 在源代码的输入过程中,一行代码输入完成就将这行代码翻译成机器指令。无法对程序进行整体的优化 方便调试程序中级语言 由于C语言和C+语言能够实现其他高级语言不能够实现,但是汇编语言能够实现的某些功能,因此它既具有高级语言的特性,又具有低级语言的特性,
3、集高级语言与低级语言的优点于一身,因此有些文献称之为中级语言 对内存地址的操作 对内存地址的位操作C+语言的发展历史(1)1963年,英国的剑桥大学推出了CPL(Combined Programming Language)语言。1970年,美国Bell实验室的Ken Thompson又以BCPL语言为基础,设计出更加简单并接近硬件的B语言。1973年Bell实验室的D.M.Ritchie在B语言的基础上设计出C语言1978年,B.W.Kernighan和D.M.Ritchie合写了The C Programming Language,成为现在广泛使用的C语言的基础,通常被称为标准C。1983年
4、,ANSI(American National Standards Institute)制定了C的标准,称为ANSI C。1990年ISO(International Standards Organization)接受87 ANSI C标准,从而形成ISO C。C+语言的发展历史(2)1979年,Bjarne Stroustrup在Bell实验室发明了C+语言。1994年,ANSI和ISO成立了一个联合标准化委员会共同为C+定制标准,并制定了第一个草稿。程序设计方法C+语言的特色结构化程序设计方法 又称为面向过程程序设计方法 通常要使用的方法是:自顶向下、逐步求精、模块化设计和结构化编码。结构
5、化程序设计方法是面向数据和过程的程序设计方法。很难实现软件的可重用,并且要保持数据和过程的完全一致也十分困难面向对象程序设计方法 世界是由对象组成的,而各个对象都有反映其个性的属性;另外,世界上所有的对象都是处于不断运动和发展过程中,对象之间通过消息相互作用,而对象的行为是对象运动发展的体现。所有的OOP程序设计语言都有3个共有的特性:即封装性、多态性和继承性。封装性 封装性是指将代码和代码所要处理的数据绑定在一起,并采用一定的机制保证代码和数据的安全,使其不受外部因素的干扰。将数据(或称为数据成员)和处理数据的函数(或称为成员函数)封装到一个类(Class)中,而在程序中通过对象来使用类。数
6、据成员和成员函数的属性可以是私有的(Private),也可以是公有的(Public)。私有数据成员和成员函数只能被对象内部的其他代码访问;而公有的数据成员和成员函数则可以被对象之内和对象之外的代码所访问。多态性 多态性允许使用同一个接口来访问一类通用的操作。“一个接口,多种方法”一旦定义好了接口,那么用户只要知道如何使用这个接口就可以得到不同方法的执行结果,而选择哪个方法进行处理则由编译器来完成。继承性 继承性是指一个对象从其他对象中获取成员的过程。在现实生活中,有许多继承的例子。如果没有继承性,那么所有的对象都需要定义自己的所有特性,这样就会重复定义很多特性;而有了继承性,那么一种特性在系统
7、中只有一次惟一的定义。C+语言的特色 在原来面向过程的机制基础上,对C语言的功能进行了扩充。增加了面向对象的机制。什么是VS.NET第一个C+程序 什么是VS.NET Visual Studio.NET 是一套完整的开发工具,用于生成 ASP Web 应用程序、XML Web Services、桌面应用程序和移动应用程序。在安装了Visual Studio.NET之后,就可以得到一个集Visual Basic.NET、Visual C+.NET、Visual C#.NET 和 Visual J#.NET 为一体的集成开发环境(IDE)。由于所有的语言都使用同样的开发环境,因此可以在使用它们的时
8、候共享工具并创建混合语言解决方案。.NET Framework是所有这些语言的基础。而这个框架是Microsoft.NET计划的基础,是一种新的计算平台,使用它可以简化在高度分布式 Internet 环境中应用程序的开发。公共语言运行库CLR 公共语言运行库是.NET Framework 的基础。可以将运行库看作一个在执行时管理代码的代理,它提供的核心服务有内存管理、线程管理和远程处理等,还强制实施严格的类型安全以确保安全性、可靠性和准确性。被运行库管理的代码称为托管代码,而不被运行库管理的代码称为非托管代码。在托管应用程序中,所有的代码在编译时生成的都是中间语言(IL,Intermediat
9、e Language)而不是机器可以识别的机器代码,由.NET Framework的CLR将IL文件真正翻译成机器语言。类库 是一个综合性的面向对象的可重用类型集合,可以使用它开发多种应用程序第一个C+程序/*This is a Hello World programme2003-10-8*/#include using namespace std;void main()coutHello world!;第2章 数据类型、运算符和表达式整型字符型浮点型布尔型空型C+提供的基本数据类型修饰符 C+还允许在不同的数据类型前面增加修饰符来更改基本类型的含义。signed,unsigned,long和
10、short。其中int前面可以单独使用siged,unsigned,long和short,并且signed和unsigned还可以与long和short组合在一起放在int前面 char前面可以单独使用signed和unsigned;double前面可以单独使用long。C+的数据类型整型 C+中定义了9种类型的整型,其中包括普通的整型(int)、长整型(long int)和短整型(short int)。这3种数据类型的前面还可以加上signed和unsigned修饰符来表示有符号整型和无符号整型。符号整数和无符号整数#include using namespace std;void main
11、()short int i;unsigned short int j;i=-1;j=i;couti=i;j=j;字符型 在计算机中保存字符采用的是8位的ASCII码。要把字符用单引号扩起来 x、0 如果所需的整数表示范围很小(在128到127之间,或者在0到255之间),可考虑使用字符型数据字符型数据和整型数据的互换使用#include using namespace std;void main()char c;short int i;c=A;i=c;coutc=c;i=i;浮点型 浮点型数据有3种:float,double和long double。选用的数据类型应该能够表示所需要的数字,不能
12、超出数据类型的表示范围,还要考虑不同的数据类型可以表示数据的精度是否符合程序要求。一种数据类型占用的内存空间越大,能够表示的数据范围就越大,但是使用这样的数字进行计算的速度也越慢,因此在选择数据类型的时候也不要没有任何依据地使用long double类型表示数据以求保险(一般的数字用double类型就足够了)或者贪图不必要的精度而损失了程序的运行速度。浮点数的舍入误差#include using namespace std;void main()float a,b;a=555555.555e5;b=a+40;couta=a;b=b;布尔型 true和false 如果在布尔表达式中使用了数字,那
13、么C+会把0作为false,非0的数字作为true。如果在一个非布尔表达式中使用bool类型的数据,那么会把true转换为1,把false转换为0。bool和int类型数据的转换#include using namespace std;void main()bool b1,b2;int i,j;b1=true;i=20;j=b1;b2=i;coutj=j;b2=b2;空型 空型是一种十分特别的数据类型,它表示没有任何值,因此并没有一个实际存在的数字可以定义成void类型。空型通常用在定义函数的时候表示一个函数没有返回值。常量和变量常量变量常量 常量是一个具有实际值的量,并且其值在程序中不可以改
14、变。整型常量 整型常量用于表示整数。可以使用十进制、十六进制、八进制的整数。十进制的数字:10、25。十六进制整数需要在整数的前面加上一个0 x:0 x123 八进制数需要在整数的前面加上一个O:O123 如果在程序中遇到了一个整数常量,通常认为这个整数的数据类型是int。如果要表示的数字超出了int类型数据的表示范围,但是在unsigned int数据类型的表示范围之内,就在这个数据类型中在数据的后面增加一个u后缀:3213213213u。如果希望定义long int 类型的常量,在这个数据后加l后缀。浮点型常量 如果在程序中遇到的一个数字带有小数部分,那么C+编译器就认为这个数字是一个浮点
15、型常量 12.3,1.0,0.123E2 浮点型数据具有舍入误差字符型常量 如果要定义字符型常量,只要用单引号将这个字符括起来就可以了。x、2、#字符串常量 把字符串用双引号括起来 Hello world!“一个字符串中的各个字符会占用内存中连续的字节,使用0字符表示字符串的结束。a与a完全不同符号常量 对于一些经常使用并且有特定意义的常量允许采用符号的方式代替,在程序中所有使用这个常量的地方都可以使用这个符号常量进行替代 使用C+提供的预编译指令#define#define PI 3.14变量 变量就是可以在程序中保存数据的量。由于这个量的值是可以改变的,因此被称为变量变量的命名 组成变量名
16、的字符必须是大写字母、小写字母、数字或者下划线,并且只能以字母或者下划线开头。变量名不能使用C+语言保留的关键字变量的声明 数据类型 变量名列表;int Count;double Price,Total;所有的变量在声明时都要求指明它的数据类型。变量的初始化 变量的初始化是指在变量被正式使用之前给变量一个初值。(1)在定义变量时给变量赋一个初值。(2)在使用变量之前给变量赋一个初值。(3)动态初始化。int Count=2;double Price,Total;Price=28.7;Total=Price*Count;常数型变量 使用const关键字创建常数型变量,这样就可以把一个变量作为常数
17、来使用 const 数据类型 变量名=表达式;const float PI=3.14;输 入 输 出coutcin流 C+中定义的输入输出都是采用流的方式进行的。在输入操作中,输入数据以字节的形式从输入设备(例如键盘、磁盘、网络等)经过输入流流入计算机的内存;在输出操作中,输出数据又以字节的形式从内存经过输出流流出到输出设备(例如显示器、打印机、磁盘、网络等)。在C+中,可以使用它提供的标准输入对象cin和标准输出对象cout实现输入输出操作。cin表示的是C+的输入流 cout表示的是C+的输出流 cerr流用于实现标准的出错输出 clog流实现cerr流的缓冲输出。cout 使用操作符来实
18、现输出,的作用是实现向流中插入。int i=10;couti=i;在输出中使用转义字符#include using namespace std;void main()coutabcdetfgbhijrkn;coutI say:hello!n;coutn的意思是回车换行n;用t和setw()实现输出#include#include using namespace std;void main()coutabctdefendl;coutghitjklendl;coutsetw(6)abcsetw(6)defendl;coutsetw(6)ghisetw(6)jkl操作符。int a;double b
19、;cinab;输入一个矩形的长和宽,输出矩形的面积#include using namespace std;void main()double Length;double Width;coutLength;coutWidth;coutArea=Length*Width的作用是将一个数的所有位向右移动指定的位数 左移位运算符的作用是将一个数的所有位向左移动指定的位数 运算符的左边是需要移位的数据,而运算符的右边放置的是一个正整数,表示要移位的位数。使用移位运算赋值运算符和赋值表达式 赋值运算符就是一个等号(=),表示把“=”右面的表达式的值赋值给左边的变量 变量=表达式 一个用赋值运算符连接运算
20、对象的式子就是赋值表达式。复合赋值运算符 只要在赋值运算符前面加上一个其他的二目运算符,就形成了复合赋值运算符。+=、=、*=、/=、%=、=、&=、=、|=逗号运算符 使用逗号运算符可以将几个表达式连接起来,这样构成的表达式就是逗号表达式,整个表达式的值就是最右边一个表达式的值。a=(b=12,c=34,d=56);首先计算b=12,然后计算c=34,再计算d=56。逗号表达式b=12,c=34,d=56的结果就是最右边的表达式的值56,因此a的值是56。sizeof运算符 sizeof运算符可以计算出数据类型所占用空间 sizeof运算符有两种使用方式:sizeof(数据类型)sizeof
21、 变量名使用sizeof运算符数据类型的转换赋值运算中的数据类型转换表达式中的数据类型转换赋值运算中的数据类型转换 如果把一种类型的数据赋值给另一种类型的变量,那么在赋值的过程中就会发生数据类型的转换。由于各种数据类型所占用的内存空间不同,因此当占用内存空间大的数据类型向占用内存空间小的数据类型转换的时候,会导致高位数据丢失的情况。数据类型转换导致的错误表达式中的数据类型转换 在表达式中,如果各个运算对象的数据类型不同,那么C+会自动把它们转换成同样的数据类型再进行计算。在进行类型转换的时候,都是从占用内存空间少的数据类型向占用内存空间多的数据类型进行转换。C+还允许使用强制类型转换来实现显式
22、的类型转换(数据类型)表达式构造数据类型结构体共用体枚举自定义数据类型结构体 将所有相关的数据项组合在一起,形成一种新的数据结构,称为结构体 struct 结构体名 数据类型 成员名;.;使用“.”运算符访问一个结构体变量的各个成员,这个运算符称为成员运算符。结构体变量名.成员名计算一个三角形的面积(1,9)(4,2)(1,2)yx共用体 将几个不同数据类型的变量保存到同一个内存空间中,实际上是这些不同数据类型的变量占用从同一个地址开始的内存空间,各个变量相互覆盖。这种使几个变量占用同样内存空间的结构称为共用体。union 共用体名 数据类型 成员名;.;使用共用体枚举 所谓枚举类型,就是指在
23、定义类型的时候一一列出这个类型的数据可能的取值。enum WeekDaysun,mon,tue,wed,thu,fri,sat;使用枚举类型自定义数据类型 使用typedef关键字将一个标识符定义为一个数据类型标识符。typedef 数据类型 标识符;第3章 控 制 结 构顺序结构选择结构循环结构顺序结构顺序结构 顺序结构程序设计是最基本的程序设计方法。指程序中的每一条语句都是顺序执行的,不存在分支、循环和跳转。选择结构if语句switch语句if 语句的第一种格式 if (表达式)语句;首先判断“表达式”的值,如果为true或者非0的数,那么就执行“语句”,否则什么也不做。“语句”部分可以是
24、单独的一条语句,也可以是复合语句。复合语句就是用括起来的多条语句,又称为分程序。表达式语句truefalse输入大写字符,输出小写字符if语句的第二种格式 if (表达式)语句1;else 语句2;首先判断“表达式”的值是否是true或非0的值,如果是,那么就执行“语句1”否则就执行“语句2”。其中“语句1”和“语句2”都可以是复合语句。表达式语句 1truefalse语句 2对前面例子的改进if语句的第三种格式 if (表达式1)语句1;else if (表达式2)语句2;else if (表达式3)语句3;else 语句n;首先判断“表达式1”的值是否是true或者非0的值,如果是,那么就
25、执行“语句1”,否则就判断“表达式2”的值是否是true或者非0的值,如果是,就执行“语句2”,否则就判断“表达式3”一直执行下去,直到最后一个else,如果前面的条件都不满足,就执行语句n。表达式语句 1truefalse表达式语句 2truefalse语句 3将百分制成绩转换成优良中及格和不及格条件运算符 表达式1?表达式2:表达式3 如果表达式1的值是true或者非0的数,那么就求解表达式2,否则求解表达式3。switch语句witch(表达式)case 常量表达式1:语句1;case 常量表达式2:语句2;case 常量表达式n:语句n;default:语句n+1;首先计算首先计算“表
26、达式表达式”的值,的值,然后看后面然后看后面case语句中的常语句中的常量表达式的值是否与之相同,量表达式的值是否与之相同,如果相同,那么就执行这个如果相同,那么就执行这个case后面的语句后面的语句(可以是一个可以是一个复合语句复合语句),直到执行到一个,直到执行到一个break语句,或者遇到语句,或者遇到switch语句的末尾。语句的末尾。break语句的语句的作用就是跳出当前正在运行作用就是跳出当前正在运行的的switch语句,并继续执行语句,并继续执行它后面的语句它后面的语句。将成绩A,B,C,D,E转换成优、良、中、及格和不及格。将A,B,C,D,E中的A,B,C,D转换成及格,把E
27、转换成“不及格”循环while循环do-while循环for循环goto语句break和continuewhile语句 while(表达式)语句;首先计算“表达式”的值,如果“表达式”的值为bool类型的true或者非0的数,那么就执行后面的“语句”,否则就执行while语句后面的代码。表达式语句truefalse求1+3+5+99的值输入整数i,求i到100所有整数的和do-while语句 do 语句;while(表达式);先执行“语句”,然后再计算“表达式”的值,如果“表达式”的值为真,那么就再执行“语句”,否则执行do-while语句后面的语句表达式语句truefalse用do-whil
28、e语句改写例3.7用do-while改写例3.8for语句 for(表达式1;表达式2;表达式3)语句;首先执行“表达式1”,然后求解“表达式2”,如果“表达式2”的值为true或者为非0,那么就执行“语句”。然后求解“表达式3”,并返回重新求解“表达式2”,如果为真,或者为非0,再次执行“语句”,并求解“表达式3”一直执行下去,直到“表达式2”的值是false或者为0,则结束for语句的执行,接着执行for语句后面的语句。表达式 2语句true表达式 1表达式 3false求1+2+3+100的值。求100到999之间的水仙花数求12+34+99100的值循环的嵌套 求11+12+1100+
29、21+22+2 100+1001+1002+100100的值。goto语句 goto 语句标号;“语句标号”就是写在一个语句前面的标识符,命名的规则与变量一样,可以由字母、数字和下划线组成,第一个字符不可以是数字。在结构化程序设计中不提倡使用goto语句,但是C+并没有完全禁止使用goto语句,因为在某些特殊情况下使用goto语句可以大大简化程序流程。使用goto语句求1+2+100的值break break;用于跳出语句所在的循环。如果存在循环嵌套的情况,那么break语句只能跳出当前循环,而不能跳出外层循环。求半径r从1到10的所有面积小于100的圆的面积矩形的长从110,宽y从110,请
30、输出面积小于10的矩形的长和宽continue语句 continue;用于结束本次循环。矩形的长从110,宽y从101,请输出面积小于10的矩形的长和宽第4章函数和预处理命令函数预处理命令函数函数的定义函数的调用函数的参数与函数的返回值函数的嵌套调用与递归调用局部变量和全局变量存储类别存储类别函数原型函数原型函数 函数是由基本语句组成的、可以完成特定功能的例程。函数是构成C+程序的基本单位,一个C+程序就是一个或若干个函数的集合。函数通常可以分为两种:一种是C+提供的标准函数,或者称库函数,是C+提供的函数,用户不用定义就可以使用;另一种是用户自己定义的函数,用于解决用户自己的问题。函数的定义
31、 数据类型 函数名(形式参数列表)声明部分 语句 函数的调用 调用一个函数的方法是指明这个函数的函数名,如果函数的定义中包括形参的话,那么须要在后面的括号中写出传给这些形参的值。f()g()函数调用形式参数和实际参数 定义函数时定义的参数是形式参数 在定义函数时,虽然定义了函数的形式参数,但是这些参数在没有被其他函数调用时并不在内存中分配存储单元,而是在被调用时才分配,函数调用结束时它所占用的内存单元被立即回收。因此在函数没有被调用时这些参数只是形式上存在,所以称之为形式参数 函数调用时使用的参数是实际参数值传递 指在函数调用时,实参的值会被复制到形参中。由于函数调用时函数的形参和实参并不占用
32、同样的存储单元,因此在这种情况下实参的值是被复制到形参中的,因此称为“值传递”改写max函数以解释形参和实参之间的值传递关系编写swap函数以解释形参和实参之间的值传递关系函数的返回值 在调用函数时能够通过函数体的return语句从函数中获得一个返回值。有些函数只是实现一些操作,不需要返回值,这样函数的函数体中就没有return语句,定义函数时也指明这个函数的返回值类型是void。函数值的数据类型与返回值的数据类型不一致函数嵌套调用 在C+中,不允许函数嵌套定义。C+中允许函数嵌套调用 允许在定义一个函数时函数体中存在对另一个函数的调用。f(x)main()g(x)根据x的输入求函数f(x)的
33、值 f(x)=2g(x)2+(3g(x)+7)1/2 g(x)=(65x3+7X2-8)/x2-3函数的递归调用 一个函数直接地或者间接地调用这个函数本身如果有下面的函数定义,求f(x)的值。已知f(0)=5,且f(x)=3*f(x-1)+6执行流程调用 f(3)输出 f(3)m=3*f(2)+6return(m)m=3*f(1)+6return(m)m=3*f(0)+6return(m)m=5return(m)main f(3)f(2)f(1)f(0)f(3)=213 f(2)=69 f(1)=21 f(0)=5用递归的方法求n!局部变量 局部变量是指在一个代码块内部定义的变量。局部变量的作
34、用范围就是定义这个变量所处的代码块,在此代码块外无法使用这个变量。由于这种变量的有效范围是局部的,所以称之为局部变量。只要是用一对括起来的代码都可以称为代码块。一个函数的函数体部分是一个代码块 一个复合语句也是一个代码块局部变量的使用全局变量 全局变量定义在所有函数之外,因此所有函数都可以访问全局变量,作用范围是整个程序。建议尽量减少使用全局变量全局变量的使用存储类别 一个变量的存储类别可以决定程序在执行时给这个变量分配什么样的存储空间 在C+中,有4种常用存储类别说明符 auto extern register staticauto存储类型 在C+中,如果不特别说明,所有的局部变量都是aut
35、o存储类型的变量。auto存储类型的变量保存在动态存储区中,在定义它的代码块执行时分配存储空间,在代码块执行结束之后释放存储空间。auto 数据类型 变量列表;用extern声明全局变量 如果需要把代码写在两个或两个以上的文件中时,如果要定义全局变量,C+采用在一个文件中定义应用的全部全局变量,而在另一个文件中使用extern关键字指明这些变量的定义在其他的文件中,这样编译器在看到用extern关键字修饰的变量时就不再为这些变量分配存储空间。使用extern声明全局变量static存储类型 如果希望局部变量在定义它的代码块执行完之后不被销毁,而是与全局变量一样一直保留其内存空间,那么就可以定义
36、这个变量为static存储类型。系统会为static存储类型的变量分配静态存储区中的内存空间。由于在代码块执行完之后这个变量仍然存在,因此如果再次调用这个代码块时,上次调用这个变量的值仍然存在。static int i;求110的阶乘 register存储类型 在C+中可以使用register关键字定义变量,作用是告知编译器这个变量将使用一个寄存器来保存,而不是使用内存空间来保存。register int i;函数原型 函数的声明和函数的定义 定义函数是指说明函数的函数名、返回值、形参以及函数体的内容 函数的声明则只要求说明函数的函数名、返回值、形参就可以了 声明函数就要使用函数原型。函数原型
37、会指明一个函数的函数名、函数的参数个数、函数参数的数据类型、函数的返回值类型。在函数原型中,还可以指定所有形式参数的名字,但这并不是必须的使用函数原型声明函数预处理命令宏定义文件包含条件编译预处理命令 编译器在对程序开始正式编译之前会对程序中的预处理命令进行预处理,预处理过程中处理的这些命令就是预处理命令。预处理命令不是C+语言的一部分,这些命令的主要作用是改进程序设计环境,提高程序设计效率。C+的预处理命令包括 宏定义命令 文件包含命令 条件编译命令宏定义命令#define 宏名 字符串 在编译时,在程序语句中只要遇到“宏名”就会用后面的“字符串”来替代。这个过程称为“宏展开”。#defin
38、e PI 3.1415#define PI 3.A1415 C+中还允许定义带参数的宏。#define MIN(a,b)(a)(b)?a:b)计算一个圆的周长和面积文件包含 使用文件包含命令的文件可以把这个命令所指定文件的全部内容包含到本文件中来。#include 文件名 或者#include条件编译 C+中允许根据特定的情况对部分代码进行编译。由于这种编译是根据指定的条件进行的,所以称为条件编译。第一种表述形式#if 表达式 代码段1#else 代码段2#endif第二种表述形式#ifdef 标识符 代码段1#else 代码段2#endif第三种表述形式#ifndef 标识符 代码段1#el
39、se 代码段2#endif使用条件编译第5章 数组、字符串和指针数组 一维数组二维数组和多维数组数组 数组是有序数据的集合。数组中每一个元素都属于同一个数据类型,并且具有相同的名字。为了区分一个数组中的不同元素,可以用数组名和下标的组合来惟一确定数组的一个元素。数组分为一维数组和多维数组,二维数组是一种最简单也是最常用的多维数组一维数组 一维数组的定义方式为:数据类型 数组名数组长度;一个数组的每个元素都可以通过数组名和下标组合的方式进行访问。具体访问形式如下:数组名下标 元素的下标是从0开始的整数使用一维数组求10个数的平均值,并找出其中的最大值和最小值用冒泡法对10个数进行从小到大的排序二
40、维数组 二维数组的定义方式为:数据类型 数组名常量表达式常量表达式 int a34;使用二维数组保存3个学生4门课成绩,求出每门课平均成绩和每名学生的平均成绩多维数组 多维数组中最简单也是最常用的一种数组是二维数组,也可以定义三维或者三维以上的数组。数据类型 数组名常量表达式常量表达式.常量表达式;字符串字符数组和字符串标准字符串库函数字符串数组字 符 串 在C+中,没有字符串数据类型,所有的字符串都是作为字符数组来处理的。所谓字符数组,就是一个一维数组,数组中每个元素都是char数据类型。字符串定义 char c10;char c10=b,e,i,j,i,n,g;字符数组来表示字符串 C+要
41、求在字符串的末尾增加一个字符的空间用于保存一个字符串结束标记0。要用字符数组来保存字符串时,要定义一个一维字符数组,让这个字符数组的长度比要保存的字符串的字符数目多1个,这样就有足够的空间保存字符串中的所有有效字符和字符串结束标记0字符串输入函数gets gets和cin的区别 gets函数要求有一个参数,这个参数用于保存已经输入的字符串。char str80;gets(str);字符串输出函数puts 带有一个参数用于保存需要输出的字符串 char str80=hello world!;puts(str);字符串长度函数strlen 求一个字符串的长度 char str80=Hello Wo
42、rld!;coutstrlen(str);字符串复制函数strcpy 把一个字符串的内容赋值给另一个字符串 char str180=hello;char str280;strcpy(str2,str1);strcpy(str2,str1,2);字符串比较函数strcmp 字符串之间比较的规则是:两个字符串从左至右逐个字符比较,直到遇到不同的字符或者遇到字符串结束标志为止。如果两个字符串完全相同,那么就认为相等;如果不同,那么第一个不同的字符相比较的结果就是字符串比较的结果。if(strcmp(str1,str2)=0)coutstr1等于str2;字符串连接函数strcat 将两个字符串连接成
43、一个字符串 char str130=Hello;char str2=World!;cout”p-data链表的创建 向系统申请一个节点所需的内存空间,可以使用new运算符 指针变量=new 数据类型;一个节点所用的空间不再需要,那么可以使用delete运算符将这块内存空间交还给系统 delete 指针变量;创建一个链表用于保存若干个整数插入节点 如果需要把一个新节点插入到链表中间的某个位置,那么相对把新节点放在链表的末尾要复杂一些。例如,要把p指针指向的节点插入到q指针指向的节点后面,可以使用下面的语句:p-next=q-next;q-next=p;创建一个链表用于保存若干个整数,并按照从小到
44、大的顺序排列节点的删除 要删除q指针后面的节点p,可以使用下面的语句:q-next=p-next;然后使用delete运算符把p节点删除,语句是delete p;第6章 类 与 对 象面向对象程序设计的特点 封装 封装性是指将代码和代码所要处理的数据绑定在一起,并采用一定的机制保证代码和数据的安全,不受外部因素的干扰 多态 指在继承的基础上允许使用同一个接口来访问一类通用的操作 继承 一个对象从其他对象中获取成员的过程定义类 在定义一个类时,需要定义它所封装的数据和函数class 类名数据成员;成员函数;访问权限类型 Private 表示私有类型,它表示该类数据成员和成员函数都是类的私有成员,
45、只能被本类中的成员函数访问。private关键字可以省略不写,但是要求所有的私有成员都写在类中开始的位置。Public 表示公有类型,它表示该类数据成员和成员函数都是类的公有成员,既可以被本类中的成员函数访问,也可以被类之外的函数访问。因此公有成员可以作为类与外部的接口。Protected 表示保护类型,它表示该类数据成员和成员函数都是类的保护成员,这样的成员允许其他的类继承。定义类的通式class 类名private:私有数据成员 私有成员函数public:公有数据成员 公有成员函数protected:保护数据成员 保护成员函数;定义对象 在定义类之后,就可以定义这个类的对象了。例如,要定义
46、一个Circle类的对象objCircle,就可以使用下面的语句:Circle objCircle;Circle是类名 objCircle是对象名。类在定义完成并经过编译后系统并不会在内存中为这个类分配空间,而是在定义了这个类的对象的时候才会为这个对象分配内存空间。因此可以说类是一个抽象逻辑框架,它定义了它的成员之间的关系,而对象则是类的实例,只有对象才真正占用内存空间。使用类和对象一位数的四则运算构造函数与析构函数构造函数 所谓构造函数就是在对象创建时起作用的一个特殊成员函数,因此通常使用构造函数来实现类中数据的初始化。构造函数从形式上看就是一个函数,但是规定它必须与类的名字一致,并且没有返
47、回类型。析构函数 析构函数则是构造函数的补充。析构函数是在对象被销毁之前起作用的特殊成员函数,通常用于做一些收尾的工作。析构函数看起来也与一般成员函数一样,但是它的函数名必须是它所属类的类名前面加上一个,并且同样不允许有返回值。使用构造函数和析构函数关于构造函数的说明 虽然构造函数不允许有返回值,但是它可以带一个或多个参数。参数的写法与一般函数的参数一样,只是在调用这个构造函数的时候必须指明参数的值。内 联 函 数内 联 函 数 内联函数存的意义在并不是为了实现面向对象程序设计,而是为了提高程序的执行效率。如果定义一个类的成员函数是内联函数,那么在调用内联函数时,这个函数是在被调用的点进行内联
48、扩展,即把被调用的内联函数的代码原样不动地复制到主调函数中,而无须进行前面提到的所有操作,这样可以省略很多CPU时间,因此它可以使程序的整个运行速度加快。定义内联函数 第一种方法是在定义类时把函数的函数体写在类的里面 第二种方法是仍然在类中只写成员函数的原型,而在类的外面定义成员函数的函数体时在前面加上inline关键字。使用内联函数静 态 成 员静态成员 静态数据成员和静态成员函数 定义方法 在定义数据成员和成员函数原型时在前面加上static关键字。C+认定静态成员与全局变量一样,在整个文件的作用域内有效,因此对静态数据成员的初始化和函数体的定义都必须在类的外面,并且不用定义类的对象,就可
49、以访问静态数据成员。使用静态数据成员 对 象 数 组定义对象数组 定义对象数组的方法与定义普通数组的方法相似。只要定义了类,就可以定义这个类的对象数组。使用对象数组指向对象的指针 定义指向对象指针的方法与前面讲到的定义指针的方法相似。例如,如果定义了类test,它有两个公有数据成员i和j,以及一个公有成员函数print(),那么就可以采用下面的方法定义一个指向对象的指针p:test*p;为这个类创建了一个对象mytest p=&mytest;为了能够通过p来访问mytest的成员i,j和print,需要使用指向操作符“-”:p-i p-j p-print使用指向对象的指针来创建对象 使用new
50、运算符创建对象 test*p=new test;或者 test*p;p=new test;使用delete运算符销毁对象 delete p;使用指向对象的指针使用指向对象的指针实现例6.6的功能在函数中使用对象在函数中使用对象时构造函数与析构函数的作用通过引用传递对象让函数返回一个对象this指针this this在C+中是一个关键字,每次调用类的成员函数时都会有一个this指针自动指向调用这个函数的对象。在成员函数内部,可以使用this指针来访问这个类的所有私有数据。使用this指针友 元友元 一般情况下,只有类的成员函数才可以访问这个类的私有数据成员。如果定义一个非成员函数为这个类的友元函
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。