【精品】《C++程序设计》教案.doc

上传人:聆听****声音 文档编号:17688076 上传时间:2023-08-01 格式:DOC 页数:118 大小:670KB
下载 相关 举报
【精品】《C++程序设计》教案.doc_第1页
第1页 / 共118页
【精品】《C++程序设计》教案.doc_第2页
第2页 / 共118页
【精品】《C++程序设计》教案.doc_第3页
第3页 / 共118页
【精品】《C++程序设计》教案.doc_第4页
第4页 / 共118页
【精品】《C++程序设计》教案.doc_第5页
第5页 / 共118页
【精品】《C++程序设计》教案.doc_第6页
第6页 / 共118页
【精品】《C++程序设计》教案.doc_第7页
第7页 / 共118页
【精品】《C++程序设计》教案.doc_第8页
第8页 / 共118页
【精品】《C++程序设计》教案.doc_第9页
第9页 / 共118页
【精品】《C++程序设计》教案.doc_第10页
第10页 / 共118页
【精品】《C++程序设计》教案.doc_第11页
第11页 / 共118页
【精品】《C++程序设计》教案.doc_第12页
第12页 / 共118页
【精品】《C++程序设计》教案.doc_第13页
第13页 / 共118页
【精品】《C++程序设计》教案.doc_第14页
第14页 / 共118页
【精品】《C++程序设计》教案.doc_第15页
第15页 / 共118页
【精品】《C++程序设计》教案.doc_第16页
第16页 / 共118页
【精品】《C++程序设计》教案.doc_第17页
第17页 / 共118页
【精品】《C++程序设计》教案.doc_第18页
第18页 / 共118页
【精品】《C++程序设计》教案.doc_第19页
第19页 / 共118页
【精品】《C++程序设计》教案.doc_第20页
第20页 / 共118页
亲,该文档总共118页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

【精品】《C++程序设计》教案.doc

《【精品】《C++程序设计》教案.doc》由会员分享,可在线阅读,更多相关《【精品】《C++程序设计》教案.doc(118页珍藏版)》请在冰点文库上搜索。

【精品】《C++程序设计》教案.doc

《C++面向对象程序设计》教案

《C++程序设计》教案

说明:

本教案在编写过程中参考了教学大纲中所列的参考文献,在此特向这些文献的作者表示感谢。

在教案的撰写过程中,得到了信息工程学院领导和教师的支持与帮助,在此也向他们表示感谢。

第一章C++语言概述

本章要点:

1、C++源程序的结构和开发过程

2、C++语言对C语言在非面向对象方面的增强

1.1C++语言的起源及特点

1.1.1从C到C++

C语言最初是美国贝尔实验室的戴尼斯•M•利奇(Dennis.M.Ritchie)在B语言的基础上开发出来的,并于1972年在PDP-11计算机上实现了最初的C语言。

C最初用作UNIX操作系统的描述语言,但由于它运算符和数据结构丰富,程序执行效率高,语言简单灵活,可直接访问计算机的物理地址,有大量的库代码和较多的开发环境,具有良好的可读性和可移植性,支持结构化程序设计,所以很快广为流行,成为应用最广泛的程序设计语言之一。

然而,C语言仍存在一些局限:

1.C语言的类型检查机制相对较弱,使得程序中的一些错误不能在编译阶段由编译器检查出来。

2.C语言本身几乎没有支持代码重用的语言结构。

3.C语言不适合开发大型程序,当规模达到一定程度时,程序员就很难控制程序的复杂性。

4.C语言不支持面向对象的程序设计。

为了克服C语言的上述局限,1980年美国贝尔实验室的对C语言进行了扩充并命名为C++。

1.1.2C++的特点

C++的特点主要表现在两方面:

一是全面兼容C;二是支持面向对象的方法。

1.C++完全包含C,是一个更好的C。

保持了C的简洁、高效和直接访问

计算机的物理地址等优点,并对C的类型系统进行了改革和扩充,比C更可靠。

2.它与C完全兼容,使得许多C代码不经修改就可为C++使用,用C编写

的众多库函数和实用软件可以直接用在C++中。

3.用C++编写的程序可读性更好,代码结构更合理,可直接在程序中映射问题空间的结构。

4.生成的代码的质量高,软件的可重用性、可扩充性、可维护性和可靠性等方面有更大提高,使得大中型程序的开发变得更容易。

5.支持面向对象的机制,可方便地构造出模拟现实问题的实体和操作。

1.2C++源程序的结构

1.2.1C++程序的一般格式

通过下面的实例简单说明C++程序的一般格式。

例1.1计算两个整数的和。

//sum.cpp//本程序的文件名

#include//C++的预编译命令,其中的iostream.h是C++

//定义的一个头文件,设置C++风格的I/O环境

intadd(inta,intb)//函数原型的声明

intmain()//主函数

{

intx,y,sum;//定义三个整型变量

cout<<”Entertwonumber:

”<

cin>>x;//从键盘输入变量x的值

cin>>y;//从键盘输入变量y的值

sum=add(x,y);//调用函数add计算x+y的值并将其/赋给sum

cout<<”Thesumis:

”<

return0

}

intadd(inta,intb)//定义add函数,函数值为整型

{

intc;//定义一个整型变量

c=a+b;//计算两个数的和

returnc;//将C的值返回,通过add带回调用处

}

1.2.2C++程序的结构特点

通过以上例子可以看出,C++程序的结构有以下特点:

1.C++程序通常由包括main()在内的一组函数组成,函数是构成C++程序的基本单位。

其中名为main的函数称为主函数,可放在程序的前部、中部和后部,不论放在程序的什么部位,它总是第一个被执行的函数。

因此,一个可运行的C++程序必须有主函数。

其他函数都是被调用函数,它们可以是系统提供的库函数,也可以是用户自己编写的函数。

用户自己编写的函数在使用前应给予“声明”。

可以说,C++是函数式的语言,程序的全部操作都是由函数完成的。

2.C++的函数有函数的说明部分和函数体两部分组成。

⑴函数说明部分包括函数名、函数类型、函数参数(形式参数)及其类型。

如例1.1中add()函数的说明部分为:

intadd(inta,intb)

↑↑↑↑↑↑

函数类型函数名形参类型形式参数形参类型形式参数

函数类型是函数返回值的类型,如int、float等。

无返回值的函数是void类型。

main()函数是由操作系统调用的函数,其返回值是void型或int型。

当其返回值为int型时,可使用return语句从main()中返回一个值。

例1.1中的返回值为零,意味着main()已被成功执行。

函数参数可有可无,但函数后面的圆括号不能省略。

⑵函数体函数说明部分下面用花括号括起来的部分,它一般包括如下内容:

变量定义:

如例1.1main()中的intx,y,sum等。

执行部分:

由若干语句组成,每条语句以分号结束。

如例1.1add函数中的”c=a+b;”等。

在某些情况下,函数可以没有变量定义部分,甚至即可没有变量定义也可没有执行部分,此时,称该函数为空函数,它不执行任何操作,但合法。

如:

exem()

{}

3.C++中的每条语句和变量定义必须以分号结束,即使是程序中的最后一条语句,也必须以分号结束,分号是C++的组成部分之一。

正因为如此,可用任何格式书写C++程序,一行内可以写多条语句,一条语句也可分写在多行上。

应注意的问题:

⑴C源程序的扩展名是.c,而C++源程序的扩展名是.cpp。

⑵常用的C++版本如TurboC++、BorlandC++都带有C和C++两种编译器,当源程序的扩展名是.c时,启动C编译器,当源程序的扩展名是.cpp时,启动C++编译器。

1.2.3C++程序的开发过程

1.程序开发工具

编制计算机程序使用的工具称为应用程序开发工具,也称为开发环境。

一个完整的程序开发工具至少应具备如下功能:

⑴源文件编辑功能

接受键盘输入,显示输入内容,允许用户对输入内容进行修改、编辑。

⑵程序编译功能

必须有一个能把用户使用的高级语言程序变成机器语言程序的编译程序(也称为编译器或转换程序),该程序在编译的过程中具有发现程序语法错误的能力,该能力是评价编译程序的一个重要指标。

⑶程序文件的连接功能

计算机程序由多个文件组成,它们可能是程序开发人员自己开发的,也可能是系统提供的,只有把它们按照程序的要求连接起来才能最终成为可执行文件。

因此,开发工具必须具有程序文件的连接功能。

⑷程序运行调试功能

应用程序中可能出现错误,开发工具必须具有程序的运行调试功能,并能及时反映调试信息,以便尽快修正错误。

⑸程序文件管理功能

计算机程序由多个文件组成,开发工具应具有使用方便的浏览、创建、删除、改名等管理功能。

2.C++程序的开发过程

⑴选择开发工具

C++开发工具很多,如TurboC++、BorlandC++、VisualC++6.0等。

这里选用较为广泛的VisualC++6.0(以下简称VC6.0)。

⑵用VC6.0建立Workspace

进入VC6.0后,选择File菜单的New命令,在New对话框中选择Projects选项卡,在该卡上选择Win32ConsoleApplication(控制台程序)工程选项,在Projectname框中添入工程名称,最后按OK按钮。

在以后的话框中选用默认设置,直到建立了工作空间为止。

⑶建立并编辑程序

使用File菜单的New命令,在New对话框中选择File选项卡,在该卡上选择SourceFile选项,在File框中添入文件名称,最后按OK按钮。

此时,建立了一个扩展名为.cpp的空文件,可在此空文件上书写和编辑C++源文件。

⑷编译源文件

用工具栏中的编辑按钮编辑源文件。

⑸连接

用工具栏中的连接按钮连接文件。

⑹运行

用工具栏中的运行按钮运行文件。

1.3C++语言对C语言在非面向对象方面的增强

C++不但继承了传统C语言的精华,增加了面向对象的特征,还在非面向对象方面对C语言进行了增强。

1.3.1注释行

传统C语言提供的是块注释方式,其格式如下:

/*explanationsentence*/

C++中,除保留了C中的块注释方式外,又增加了更为方便的单行注释方式,其形式如下:

//explanationsentence

1.3.2灵活的局部变量说明

传统C语言中,局部变量说明必须放在可执行代码的前面,数据说明语句和可执行语句的混合将引发编译错误。

而C++中,允许在程序代码的任何地方对局部变量进行说明,所说明变量的作用域是从该变量说明的地方开始到该变量所在的最小分程序的末尾。

如for(inti=5;i<=10;i++)在C语言中是非法的,而在C++中是合法的。

1.3.3cin和cout

在程序中,常常要把数据从一个对象传递到另一个对象中,C++将这种传递称为输入/输出(I/O)流。

C++中没有专门的输入/输出语句,为了实现I/O流,C++系统预定义了流类来支持I/O流的操作,cin和cout就是流类预定义的两个对象,使用它们可以完成标准输入和输出。

1.cin

是标准输入流,在程序中cin代表标准输入设备键盘。

使用cin并结合运算符>>可以处理从键盘上进行的标准输入,其使用格式如下:

cin>>存放输入数据的变量名;

2.cout

是标准输出流,在程序中cout代表标准输出设备屏幕。

使用cout并结合运算符<<可以处理标准输出即屏幕显示,其使用格式如下:

cout<<待输出的变量名或表达式;

3.运算符<<和>>

运算符<<和>>在C++中仍然保持C中“左移”和“右移”的功能,但当用于输入/输出时,通过重载扩充了他们的功能。

重载后的运算符>>表示将从键盘上读取的数据传送给右面指定的变量,如:

cin>>x;

此时,从键盘输入的数值会自动转换为变量x的类型并存入x内。

但应注意,变量x必须是基本数据类型,而不能是void类型。

运算符>>允许连续输入一连串数据,例如:

cin>>x>>y>>z;

此时,它按书写顺序从键盘上提取所要求的数据并存入相应的变量中。

应注意的是,连续输入的多个数据两两之间要用空白符(空格、会车或Tab键)隔开。

重载后的运算符<<表示将右面指定的变量的值显示在屏幕上。

例如:

cout<

仍然要求变量a必须是基本数据类型,而不能是void类型。

运算符<<允许连续输出一连串数据,也可以输出表达式的值。

例如:

cout<

4.说明

⑴使用cin或cout进行I/O流的操作时,在程序中必须包含头文件iostream.h,否则,编译会产生错误。

⑵C++中仍可使用C中stdio函数库中的I/O函数,但只有使用cin>>和cout<<才能体现出C++的输入/输出风格。

和stdio函数库中的I/O函数一样,cin>>和cout<<也可用指定格式精心进行输入/输出。

⑶C中常用’\n’来实现换行,C++仍可使用它。

同时,C++又增加了一个换行控制符endl,其作用与’\n’一样。

如下面的两条语句是等价的:

cout<<”x+y=”<

cout<<”x+y=”<

例1.2使用cin或cout进行I/O操作的例。

#include

voidmain()

{

intage;

charname[20];

cout<<“你好,请输入你的姓名和年龄:

”<

cin>>name>>age;

cout<<“你的姓名和年龄是:

”<

return0;

}

1.3.4结构、联合和枚举名作为类型名

C++中,结构名、联合名、枚举名都可直接作为类型名,再定义变量时,不用再在结构名、联合名、枚举名前面冠以struct、union、enum。

例如,定义结构和枚举如下:

structstring

{

char*ptr;

intlength;

};

enumbool{FALSE,TRUE};

当定义变量时,C中必须写成:

structstringstr;

enumbooldone;

而在C++中,结构名string、枚举名bool都被直接作为类型名用,可以直接声明为:

stringstr;

booldone;

1.3.5无名联合

无名联合是C++提供的一种特殊联合,用来说明一组无标记名的、共享统一内存地址的数据项。

如:

union

{

inti;

floatf;

};

他声明了变量i和f具有相同的存储地址。

无名联合通过使用其中数据项名直接存取,如可直接使用上面无名联合的变量i和f:

i=20;

f=15.0;

1.3.6强制类型转换

C中如果要把整型数据转换成浮点型数据,必须用下面的格式:

inti=10;

floatf=(float)i;

C++保留了这种强制类型转换方式,还提供了另一种方法,即把类型名作为函数名使用,这样就使类型的转换变成了函数的调用,不但方便,而且增强了可读性。

使用这种方法,上面的语句就可改写为:

inti=10;

floatf=float(i);

1.3.7const修饰符

C++除可用C中习惯使用的#define来定义常量外,还可使用const修饰符将一个标识符定以为常量,使该标识符的值在程序运行过程中不能以任何形式对其进行修改。

例如:

constinti=10;

这时,标识符i被const声明为常量,它有类型,有地址,可用指针指向它,但不能修改它。

const可以和指针一起使用,有三种情况:

⑴修饰指针所指向的变量,将该变量定义为常量。

此时,指针变量的值可以改变,而指针所指向的变量的值不能改变。

例如语句

constchar*str=&c;

声明了一个指针变量str,它指向变量c,但由于用const进行了修饰,所以,变量c变成了常量,其值不允许修改。

而指针变量str的值可以修改。

⑵将指针本身修饰为常指针,指针所指向的变量不受const修饰的影响,仍为变量。

此时,指针变量的值不能改变,称为常指针,而指针所指向的变量的值可以改变。

例如语句

char*conststr=&c;

声明了一个指针变量str,它指向变量c,但由于指针变量str用const进行了修饰,所以,变成了常量,其值不允许修改,而变量c的值可以修改。

⑶将指针本身修饰为常指针,指针所指向的变量修饰为常量。

此时,指针变量的值不能改变,被指针所指向的变量的值也不能改变。

例如语句

constchar*conststr=&c;

声明的指针变量str和指针所指向的变量c都被定义成常量,它们的值都不允许改变。

几点说明:

⑴如果用const定义的是整型常量,则关键字int可以省略。

⑵常量一旦被建立,在程序的任何地方都不能被修改。

⑶与#define定义的常量不同,const定义的常量可以有自己的数据类型,从而使C++的编译器可进行更加严格的类型检查,具有良好的编译检测性。

⑷const的作用与#define相似,但使用#define可能会带来程序的不安全性,如下面的程序:

例1.3使用#define可能会带来程序的不安全性的例

#include

main()

{

inta=1;

#defineT1a+a;

#defineT2T1-T1;

cout<<”T2is:

”<

return0;

}

初看程序,输出的结果是:

T2is:

0

实际的输出结果是:

T2is:

2

究其原因,是编译系统将语句:

cout<<”T2is:

”<

解释为:

cout<<”T2is:

”<

如果用const取代上例中的两个#define语句,将不会引起这个错误。

请看下例:

例1.4使用const会消除#define不安全性的例。

#include

main()

{

inta=1;

constT1=a+a;

constT2=T1-T1;

cout<<”T2is:

”<

return0;

}

⑸函数参数也可用const说明为常量,以保证实参在函数内部不被修改。

⑹ANSIC标准也采用了const,但两者是有区别的,如下面的程序段在C++中是合法的,而在ANSIC中是不合法的:

constintsize=10;

intch[size];

另外,在ANSIC中const定义的常量是全局常量,而C++中const定义的常量要根据定义的位置来决定是局部的还是全局的。

1.3.8函数原型

C语言建议程序的编制者为程序中的每个函数建立原型,而C++则要求必须为每个函数建立原型,说明函数的返回值类型、函数名称、参数类型及个数。

主要目的是在编译时检查调用函数是否与预先说明的原型一致,以维护程序的正确性。

函数原型的一般格式为:

返回类型函数名(参数表);

参数表包括所用的参数和他们的类型,参数之间用逗号分开。

例1.5函数原型声明的例。

#include

voidprint(char*s);

voidmain()

{

print(“hello,lanzhou!

”);

}

voidprint(char*s)

{cout<

使用函数原型时应注意以下问题:

⑴函数原型是一条语句,必须以分号结束。

⑵函数原型的参数表中可以不包括参数的名字而只包括它们的类型,如语句longaree(int,char);是合法的。

但函数定义中函数说明部分的参数必须给出名字,并且不能以分号结尾。

⑶在程序中,函数原型要求出现在函数调用之前,但当一个函数的定义在前而调用在后时,可以不单独给出它的原型,此时的函数定义的说明部分就起到了函数原型的作用。

⑷主函数不必说明原型,它被认为是一个自动说明原型的函数,且不存在被调用的问题。

⑸C++的参数说明必须放在函数名后的括号内,不能放在函数说明部分与函数体之间,如下面的程序在编译时将会出错:

#include

voidprint(int,char);

voidmain()

{print(“hello,china!

”);}

voidprint(ch)

charch;//错误的参数说明方式

{cout<

⑹原型中没有说明返回类型的函数(包括主函数main),C++默认它的返回类型为int,因此,下面的圆形说明在C++中是等价的:

cat(int,char);//默认返回整型数

intcat(int,char);//指明返回整型数

⑺如果一个函数没有返回值,则必须在函数原型中注明返回类型为void。

当主函数没有返回值时,可以在main()前注明void,这样主函数中就不必有“return0”之类的返回语句了。

⑻如果原型中没有注明参数,C++假定给函数的参数表为空(void),因此,下面的原型说明在C++中是完全一样的:

f();//表示该函数不带任何参数

f(void);//表示该函数不带任何参数

但在C中,上述两个原型说明是不同的:

f();//表示该函数的参数没有给出,它可能有多个参数

f(void);//表示该函数不带任何参数

1.3.9内联函数

C++提供了内联函数,在程序中调用内联函数时,编译器就用该函数的函数体中的代码替代函数调用表达式,这样,不但减少了函数调用时保留现场所用的开销,而且提高了程序的运行效率,同时消除了使用宏定义#define带来的不安全性(产生这个问题的原因是,C中宏定义#define的代码是被直接展开的,而C++的内联函数的代码是被替代的)。

要声明一个函数为内联函数,只要在函数说明的前面冠以关键字”inline”就行了。

下面的程序中就定义了一个内联函数:

#include

inlinef

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2