1 / 158

C++ 是一门混合型面向对象程序设计语言,它兼容了 C 语言并弥补了其缺陷,增加了面身对象的能力。其中,改造后的 C 语言是面向对象部分的基础。

C++ 是一门混合型面向对象程序设计语言,它兼容了 C 语言并弥补了其缺陷,增加了面身对象的能力。其中,改造后的 C 语言是面向对象部分的基础。. 概述. 一般语法的改进 指针和引用 函数的改进 类和对象 构造函数和析构函数. C++ 语言是一种高级程序设计语言,它的开发过程与其他高级语言程序开发过程类似,一般要经过四个步骤:. 2.1 C++ 程序的开发过程. 编辑. 编译. 链接. 执行. 编辑

ann
Download Presentation

C++ 是一门混合型面向对象程序设计语言,它兼容了 C 语言并弥补了其缺陷,增加了面身对象的能力。其中,改造后的 C 语言是面向对象部分的基础。

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++是一门混合型面向对象程序设计语言,它兼容了C语言并弥补了其缺陷,增加了面身对象的能力。其中,改造后的C语言是面向对象部分的基础。 概述 • 一般语法的改进 • 指针和引用 • 函数的改进 • 类和对象 • 构造函数和析构函数

  2. C++语言是一种高级程序设计语言,它的开发过程与其他高级语言程序开发过程类似,一般要经过四个步骤: 2.1 C++程序的开发过程 编辑 编译 链接 执行

  3. 编辑 是指把按照C++语法规则编写的程序代码通过编辑器(Borland C++, Visual C++, Turbo C++ 等)输入计算机,并存盘。在存盘时,C++源文件的扩展名为.CPP。 编译 将编辑好的C++源程序通过编译器转换为目标文件(OBJ文件)。即生成该源文件的目标代码。 2.1 C++程序的开发过程

  4. 链接 将用户程序生成的多个目标代码文件(.obj)和系统提供的库文件(.lib)中的某些代码连接在一起,生成一个可执行文件(.exe)。 执行 把生成的可执行文件运行,在屏幕上显示运行结果。用户可以根据运行结果来判断程序是否出错。 2.1 C++程序的开发过程

  5. 2.1 C++程序的开发过程

  6. 书写格式 C++语言程序的书写格式自由度高,灵活性强,随意性大,如一行内可写一条语句,也可写几条语句;一个语句也可分写在多行内。不过应采用适当的格式书写,便于人们阅读和理解。 为了增加程序的可读性和利于理解,编写程序时按如下要点书写: (1)一般情况下每个语句占用一行。 (2)不同结构层次的语句,从不同的起始位置开始,即在同一结构层次中的语句,缩进同样的字数。 (3)表示结构层次的大括号,写在该结构化语句第一个字母的下方,与结构化语句对齐,并占用一行。 (4)适当加些空格和空行。 2.1 C++程序的开发过程

  7. C++语言程序由以下基本部分组成。 1. 函数 一个C++程序是由若干个函数构成的。函数分为库函数(标准函数)和自定义函数。库函数一般是由系统提供的。一个完整的C++语言程序只有一个主函数。 2. 预处理命令 预处理命令以位于行首的符号“#”开始,C++提供的预处理有文件包含命令、宏定义命令和条件编译命令三种。 2.1 C++程序的开发过程

  8. #include文件包含指令指示编译器将一个源文件嵌入到当前源文件中该指令处。#include包含指令有以下两种使用形式:#include文件包含指令指示编译器将一个源文件嵌入到当前源文件中该指令处。#include包含指令有以下两种使用形式: #include <文件名> #include "文件名" 第一种形式,嵌入的源文件用尖括号括起来,告诉编译预处理程序在编译器自带的或外部库的头文件中搜索要嵌入的文件,它们一般是系统提供的公共头文件,存放在系统目录中的Include子目录下;第二种形式,嵌入的源文件用双引号括起来,这种形式的#include指令告诉编译预处理指令先在当前子目录搜索要嵌入的文件,如果没有找到文件,再去搜索编译器自带的或外部库的头文件。 2.1 C++程序的开发过程 #include文件包含指令

  9. 函数调用出现在函数定义之前,或者调用在其它文件中(如系统库)定义的函数,必须先进行函数声明。系统函数按其功能被分成几大类,对应每类函数有一个头文件,其中给出了这一类函数的原型声明,所以,我们只需在程序中使用#include指令包含相应的头文件,而不必在程序中直接进行函数的声明。函数调用出现在函数定义之前,或者调用在其它文件中(如系统库)定义的函数,必须先进行函数声明。系统函数按其功能被分成几大类,对应每类函数有一个头文件,其中给出了这一类函数的原型声明,所以,我们只需在程序中使用#include指令包含相应的头文件,而不必在程序中直接进行函数的声明。 以多文件方式组织的程序常常需要在各文件之间共享一些常量声明、变量声明、结构声明、函数声明和宏定义,可以将这些语句放在一个C++头文件中(以h作扩展名),然后利用#include指令将该头文件包含到需要这些内容的源文件中。 2.1 C++程序的开发过程 为什么要使用 #include指令?

  10. 2.1 C++程序的开发过程 #define宏定义指令 • 宏是一个表示特定内容的标识符,宏定义就是定义一个代表一个字符串或一段代码串的宏,被代表的内容称为宏体。在源程序中每遇到一个宏,编译程序均以定义的宏体替代之,这种替代过程称之为宏替换。 • C++使用#define宏定义指令定义一个宏,其一般形式为: #define <宏名> <宏体> 宏名是一个用户自命名的、具有特定含义的标识符,宏体是由任意字符组成的字符序列。

  11. 2.1 C++程序的开发过程 例如,编程时可以首先将一个数组的最大长度定义成一个宏: #define MAXLENGTH 100 . . . . . . int nArray[MAXLENGTH]; for(int i=0; i< MAXLENGTH; i++) . . . . . . 编译器对源程序进行编译时,每遇到一个宏MAXLENGTH时,都将其替换为100。对程序员而言,采用宏定义增加了程序的可读性,并有利于以后程序的修改。

  12. 2.1 C++程序的开发过程 带参数的宏定义: 利用#define指令还可定义带参数的宏。当编译器对这样的宏进行宏替换时,除了用宏体替代宏,还须用实际参数替代宏体中的参数。带参数的宏定义的一般形式为: #define <宏名>(参数1,参数2,…,参数n) <(宏体)> 例如: #define MAX(a , b) ( (a)>(b) ? (a):(b) ) main() { cout<<MAX(10 , 11)<<endl; }

  13. 2.1 C++程序的开发过程 宏与内联函数的区别: 带参数的宏功能上与内联函数类似,但两者有本质的区别。宏替换是在正式编译之前,不进行参数的传递。函数调用是发生在程序实际执行时,要进行实参与形参的传递。使用宏的好处是它不需要调用及返回时的开销,但宏有一些不安全因素,可能带来副作用。对于不带参数的宏,使用const常量类型取代宏会更安全。 宏定义的取消: #undef <宏名>

  14. 3. 程序语句 一条完整的语句必须以分号“;”结束。程序语句有如下几类: (1)说明语句 用来说明变量的类型和初值。 如下面语句是把变量说明为浮点数。 float a, b, c; 又如下面语句是把变量sum说明为整型变量,并赋初值为零。 int sum = 0; 2.1 C++程序的开发过程

  15. (2)表达式语句 由一个表达式构成一个语句,用以描述算术运算、逻辑运算、或产生某种特定动作,在任何表达式最后加一个分号就构成了一个语句。如上例由赋值表达式加“;”就构成一个赋值表达式语句。 (3)程序控制语句 用来描述语句的执行条件与执行顺序的语句,C++语言的控制语句有9种,如下页所示。其语句中的括号( )表示其中是条件,~表示内嵌的语句。 2.1 C++程序的开发过程

  16. if() ~ else条件语句 for() ~ 循环语句 while() ~ 循环语句 do ~ while() 循环语句 continue结束本次循环语句 break中止循环式(switch语句) switch多分支选择语句 goto转移语句 return从函数返回语句 2.1 C++程序的开发过程

  17. (4)复合语句 复合语句是一种十分重要的语句,由大括号{和}把一些说明语句和表达式组合在一起,使它们在语法上等价于一个简单语句;可由若干简单语句或复合语句组成。 例如:if ( a>b ) { c = a - b; d = c * a; } else { c = a + b; d = c * b; } 2.1 C++程序的开发过程

  18. C++的输入和输出 2.2 一般语法的改进 C C++

  19. C语言程序: /*这是一个简单的C程序: simple.c */ #include <stdio.h> void main(void) { printf( " Hello World !\n " ) ; // 输出字符串 } 用C++语言编写同样功能的程序

  20. C++语言程序: // 这是一个简单的C++程序:simple.cpp #include <iostream.h> void main(void) { cout<<" Hello World !\n "; // 输出字符串 } 程序运行后在屏幕上输出: Hello World !

  21. 注释 2.2 一般语法的改进

  22. 变量初始化 2.2 一般语法的改进 C++支持两种形式的初始化第一种形式是使用赋值操作符的显式语法形式 int Bval = 1024; string project = " BeiJing2008"; 在隐式语法形式中初始值被放在圆括号中 int Bval( 1024 ); string project("BeiJing2008 " ); 在这两种情况中ival 都被初始化为1024 而project 的初始值为BeiJing2008

  23. 变量定义可以位于程序中的任何地方 2.2 一般语法的改进

  24. 符号常量的定义 2.2 一般语法的改进 C C++

  25. 强制转换类型 2.2 一般语法的改进 int x; float y; y=(float)x; • C的强制类型转换法 • (类型名)表达式 • 函数表示法(仅限简单类型) • 类型名(表达式) int i=int(1.35);

  26. 结构体与枚举类型的用户标识名 2.2 一般语法的改进 enum traffic {red,green,yellow}; struct student{ int num; char name[20];}; traffic Light; student stu1; !不必在一个结构体名之前加struct,不用在一个枚举类型名之前加关键字enum。

  27. 结构体 • 结构(structure)属于构造类型,它是由多种类型的数据成分组成的数据类型。例如,一个职员的信息由ID号、姓名、性别、出生日期和工资等数据项组成,可采用结构类型来表示。 • 区别以前所介绍过的数据类型,结构的具体构成需要用户自己定义,即定义一个结构类型。 • 结构中的每个数据项称为成员,成员的类型可以是基本数据类型,也可以是一个诸如结构这样的构造类型。 结构类型的定义形式:

  28. 结构类型定义的一般形式为: struct <结构类型名> { <数据类型> <成员1>; <数据类型> <成员2>; . . . . . . <数据类型> <成员n>; }; 例

  29. 下面定义职员结构类型: struct staffer { int ID; char name[20]; bool sex; float salary; }; 定义了结构(类型),就可以用结构声明结构变量,结构变量的声明形式如下: <结构类型名> <变量名>; 例如. . .

  30. 例如,利用定义的职员结构staffer声明一个职员结构变量:例如,利用定义的职员结构staffer声明一个职员结构变量: staffer employee1; 注意: 不能在定义结构时对成员进行初始化,因为结构是一种数据类型,而不是一个变量。只有在声明一个结构变量时才可以对该结构变量的成员进行初始化。如下所示: staffer employee1= {110105, "LiMing", 1, 3809.80 };

  31. 结构变量的引用 • 结构变量是一种组合类型的变量,结构变量的引用包括整个变量的引用和其成员的引用。 • 作为变量,整个结构变量可以进行赋值、作为函数参数和返回值。 • 结构变量成员的使用与同类型的普通变量完全一样,但必须使用成员运算符“.”说明是哪一个结构变量的成员。结构成员引用的形式为: <结构变量名>.<成员名> 例如. . .

  32. 结构变量及其成员的引用: employee1=employee2; // 引用整个结构变量 employee1.ID=110108; // 引用结构成员 strcpy(employee1.name, "WangPing"); // 结构成员 指向结构变量的指针: 结构变量的指针的声明、赋值和使用规则同普通指针一样。可以通过使用指向运算符“->”引用结构成员。引用的形式如下: <结构变量指针> -> <成员名> 例如. . .

  33. 通过指向运算符“->”引用结构成员: staffer* pStaff=&employee1; // 声明结构变量的指针 pStaff ->ID=110115; // 引用结构成员 strcpy(pStaff ->name, "WangPing"); // 引用结构成员 例利用结构编程,计算一个学生4门课的平均分数。 #include <iostream.h> struct student{ // 定义结构 char name[20]; int score[4]; int average; };

  34. void main(void) { student stu; // 声明结构变量 int i, sum=0; cout<<"Enter name:"; cin>>stu.name; // 输入姓名 cout<<"Enter four scores :"; for(i=0; i<4; i++) cin>>stu.score[i]; // 输入4门课分数 for(i=0; i<4; i++) sum+=stu.score[i]; // 计算平均分数 stu.average=sum/4; cout<<"The average score of "<<stu.name <<" is:"<<stu.average<<'\n'; // 输出结果 }

  35. 枚举 • 枚举类型(enum)也是程序员定义的类型,它是一种允许用符号常量代表数据的数据类型。 • 在定义枚举类型时必须指定一组被命名的符号常量的集合,该集合决定了该枚举类型的变量可以具有的合法值。 • 枚举类型定义的一般形式为: enum <枚举类型名> { <常量1>,<常量2>, …,<常量n> }; • 枚举常量是C++标识符,每一个枚举常量对应一个整数值,第1个常量值为0,第2个常量值为1,依此类推。 使用举例:

  36. 使用举例: • 以下定义了一个表示颜色的枚举类型: enum Color{Red, Green, Blue}; • 定义好的枚举类型可作为数据类型用于声明枚举型变量,例如: [enum]Color MyColor ; • 声明了枚举型变量,就可以将定义枚举类型时所列举的枚举常量集合中的任何一个常量赋值给枚举型变量。例如: MyColor = Green; • 在定义枚举类型时,可以为枚举常量指定其对应的整型值,例如: enum Color{Red = -1, Green, Blue =3};

  37. 用typedef定义类型 用typedef语句定义类型是指对原有的数据类型定义一个新的名称,而不是真正定义一个新的数据类型。 typedef语句的使用形式为: typedef <数据类型> <新的类型名>; 其中的数据类型可以是简单的数据类型,如int、float和char等,也可以是诸如结构、枚举等组合数据类型。 使用typedef的目的有两个:移植程序,增加程序的可读性。 使用举例:

  38. 例如: typedef int INTEGER; typedef unsigned char BYTE; typedef struct tagDate { int year; int month; int day; } DATE; 新定义数据类型如INTEGER(一般用大小字母) 与int完全一样,可以用它进行变量的声明。如: INTEGER i ;

  39. 2.3 数据类型和表达式 • 基本数据类型是C++预定义的数据类型,C++的基本数据类型包括字符型、整数型、实型(单精度和双精度)和无值型。 • 每种基本数据类型都使用一个关键字来表示,如char、int、float、double和void等,见下表。 • 数组、指针和类等派生数据类型是程序员按照C++的语法要求在基本数据类型基础之上建立起来的。 • 除void数据类型以外,其它基本数据类型加类型修饰符signed、unsigned、short和long。

  40. 数据类型 说明 长度(位) char 字符型 8 int 整型 32 float 单精度实型 32 double 双精度实型 64 void 无值型 0 unsigned [int] 无符号整型 16 short [int] 短整型 16 long [int] 长整型 32 C++基本数据类型

  41. 例: int num, total; float v, r, h; int a=3; // 等价于:int a(3); char c=‘A’; long lx=12345678; unsigned int nWidth; 可以使用运算符“( )”进行强制类型转换: float x=123.56; int i=(int)x; // i=123

  42. 2.3 数据类型和表达式 C++ has a set of fundamental types corresponding to the most common basic storage units of a computer and the most common ways of using them to hold data: • A Boolean type (bool) • Character types (such as char) • Integer types (such as int) • Floating point types (such as float) Bjarne Stroustrup AT&T Labs

  43. 2.3 数据类型和表达式 In addition, a user can define Enumeration types for representing specific sets of values (enum) There also is a type, void, used to signify the absence of information Bjarne Stroustrup AT&T Labs

  44. 2.3 数据类型和表达式 From these types, we can construct other types: • Pointer types (such as int *) • Array types (such as char []) • Reference types (such as double &) • Data structures and classes For most applications, one could simply use boolfor logical values, charfor characters, intfor integer values, and doublefor floating point values. The remaining fundamental types are variations for optimizations and special needs that are best ignored until such needs arise. Bjarne Stroustrup AT&T Labs

  45. 2.3 数据类型和表达式 • Specifiers Specifiers modify the meanings of the basic built-in types and expand them to a much larger set. There are four specifiers: long, short, signed, and unsigned. long and short modify the maximum and minimum values that a data type will hold. A plain int must be at least the size of a short. The size hierarchy for integral types is: shortint, int, longint. The size hierarchy for floating point numbers is: float, double, and longdouble. “Long float” is not a legal type. There are no short floating-point Thinking in C++

  46. 2.3 数据类型和表达式 • Specifiers The signed and unsigned specifiers tell the compiler how to use the sign bit with integral types and characters (floating-point numbers always contain a sign). An unsigned number does not keep track of the sign and thus has an extra bit available, so it can store positive numbers twice as large as the positive numbers that can be stored in a signed number. signed is the default and is only necessary with char; char may or may not default to signed. By specifying signedchar, you force the sign bit to be used. Thinking in C++

  47. 数组 数组属于构造类型,它是一组具有相同类型数据的有序集合,其中每个数据称为数组的元素。数组按其下标的个数分为一维数组、二维数组和多维数组。 一维数组的声明方式如下: <数据类型> <数组名>[常量表达式]; 二维数组的声明方式如下: <数据类型> <数组名>[常量表达式] [常量表达式]; 数组名后括号中的常量表达式表示数组的长度,即数组所包含元素的数量。例如. . .

  48. 数组声明语句:float score[30]; // 数组score有30个元素,其数据类型是float型int Array[12][4]; // 数组Array有12×4个元素,其数据类型是int型 数组的使用: 数组声明后,可以引用数组每个元素,但不能一次引用整个数组。数组元素作为一个简单的变量对待。数组元素的引用方式如下: <数组名>[下标表达式] <数组名>[下标表达式] [下标表达式]

  49. 注意: • 数组元素的下标从0开始,直到数组长度减1,如:score[0],score[1],…,score[29]。 • 在编译C++源程序时,为了保证程序编译和运行的效率,C++编译系统不对数组下标进行越界检查,程序运行时系统也不会提出越界警告。因此在对数组元素进行操作时应格外注意,以免破坏其它存储单元的数据,否则可能造成不可预料的后果。

  50. 数组的初始化 • 声明数组时可以用一个用花括号括起的常量列表对数组进行初始化,例如: float grade[3]={90.0, 75.0, 85.0}; • 二维数组和多维数组的初始化可以按照数组的排列顺序或分行赋初始值的方法。例如: int a[2][3]={2, 4, 6, 8, 10, 12}; // 按数组的排列顺序 int a[2][3]={{2, 4, 6},{8, 10, 12}};// 分行赋初始值 其中,2、4、6分别为a[0]的元素a[0][0]、a[0][1]和a[0][2]的初始值。

More Related