面向对象程序设计概述课件(模板)_第1页
面向对象程序设计概述课件(模板)_第2页
面向对象程序设计概述课件(模板)_第3页
面向对象程序设计概述课件(模板)_第4页
面向对象程序设计概述课件(模板)_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

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

文档简介

面向对象程序设计概述学习体会

学习C++编程技术,必须了解和掌握C++制订的各种规则,然后应用这些规则写程序,也就容易了。这与学习开车,首先要学习交通规则,然后才能驱车上路的道理相同。但与Basic和C等语言相比,C++的规则确实多出许多,掌握它必须付出努力!然而一旦掌握了这些规则,对于学习掌握面向对象编程技术,乃至于学习JAVA,C#及VB.net之类的编程语言,也就容易多了。千里之行,始于足下!第1章面向对象程序设计概述本章主要讲述:计算机程序语言的发展演变过程面向对象程序技术的基本特征面向过程与面向对象程序设计C++程序的结构及数据输入与输出VC++实例编程1.1 计算机程序设计语言的发展

本节主要介绍计算机语言的发展过程:机器语言→汇编语言→高级语言→面向对象程序设计语言着重了解面向过程(即结构化程序)和面向对象程序设计在程序结构、程序思想上的差别。1.1.1

机器语言机器语言最早的程序设计语言,它由计算机能够识别的二进制指令系统构成。指令就是指计算机能够识别的命令,它们是一些由0和1组合成的二进制编码。指令系统计算机硬件系统能够识别的所有指令的集合。1.1.2汇编语言

1、汇编语言用一些便于记忆的符号代替机器语言中的二进制指令代码,就将二进制的机器语言转换成了一种便于记忆的符号语言,这就是汇编语言。2、与机器语言的比较汇编语言编程比机器语言简单。同机器语言一样,它仍然是与机器相关的。不同机器系统的汇编语言并不相同,要在不同硬件系统(其指令系统不同)的计算机上完成相同的任务,需要编写不同的汇编程序。移植性不好。

1.1.3高级语言

1.高级语言的概念及特征高级程序设计语言的出现是计算机科学技术发展史上的一个里程碑。高级语言屏蔽了与机器硬件相关的细节,提高了语言的抽象层次,程序员可以用接近自然语言的程序语言编制软件,然后通过编译器转换成机器可执行的代码(机器语言)。不仅大大降低了程序设计的难度,而且也使程序易被人们理解。

高级语言程序的通用性和可移植性更高与人们自然思维很接近,编程更容易、简单“站在巨人的肩头上”。一个函数名后面必须跟一对圆括号,函数参数可以缺省,如intmain()。intscore;//私有变量score私有的数据成员和成员函数只能被本类的成员函数所调用。学习C++编程技术,必须了解和掌握C++制订的各种规则,然后应用这些规则写程序,也就容易了。C++提供了许多控制数据输出格式的函数和操纵符,这些操纵符或操纵函数是在iomanip.【例1-3】用cout输出字符数据。在析取运算符>>后面只能出现变量名,下面的语句是错误的。局部声明部分(在函数内的声明部分)。10 cin>>a>>z 23.cin>>x1>>x2>>x3;同简单的C程序相比较,VC++程序的编译运行需要在一个项目环境中才可行。0的“文件|新建”命令,进入VC++的“新建”对话框,如图所示。例:cout<<“1234567812345678”<<endl;对象内部的实现代码受到封装壳的保护,其它对象不能直接修改本对象所拥有的数据和代码。C++还保留了C语言的注释形式,可以用“/*……*/”对C++程序中的任何部分作注释。inheritance4 C++与面向对象程序设计intnum;//私有变量num对象之间通过传递消息相互影响高级语言A=A+5机器语言0101100000101

汇编语言(助记符)如用ADD表示加法、用SUB表示减法高级语言汇编语言机器语言A=A+5addA,50100100000101加A5人的语言机器的语言1.1.3高级语言

2、结构化程序设计SP的基本内容结构化程序设计语言是一种面向过程的程序设计语言结构的类型顺序、分支、循环结构化程序设计思想利用过程或函数来抽象和模拟客观现实。1.1.3高级语言

结构化程序设计方法重点放在如何实现细节过程方面,将数据与函数(过程)分开。形式:主模块+若干个子模块

(如C:main()+子函数)。特点:

自顶向下,逐步求精——功能分解。缺点:效率低,是手工作坊式的编程。1.1.3高级语言全局变量局部变量函数A局部变量函数B只有函数A才能访问只有函数B才能访问可被任何函数访问全局变量结构化程序的问题——数据与算法分离,程序数据和操作数据的过程(函数)是分离的。1.1.3高级语言structPerson{ charname[10]; charaddr[20]; charphone[11];}Personp[100]; intn=0;

voidInputData(){......} voidSearchAddr(char*name){……} voidSearchPhone(char*name){……} voidPrintData(){……}Voidmain(){

…… //调用前面编写的函数,完成通信录数据处理

……} 结构化程序的案例——个人通信录程序存放个人信息的数据结构定义全局数据定义操作数据的函数主函数控制程序流程1.1.3高级语言由图可见,大型程序中,函数和数据之间存在数目巨大的潜在连接关系.若全局数据有所改动,可能会导致所有访问这个数据的全部函数的重写.结构化程序语言将客观世界的事物的属性被抽象成了数据,而行为则被抽象成了函数(过程),但数据和函数是分离的。描述一个事物特征的数据能够被其他函数修改(如全局数据可被任何函数修改),这与客观事物的本来面目不相符合,因为一个事物的属性只有它自已才能改变。缺点:数据安全性不高,程序规模变大时,设计与维护非常困难。上述个人通信管理程序代表了结构化程序设计语言的编程方法:先定义一些全局性的数据结构,然后编写一些过程对这些数据结构进行操作,其模型如下图所示:全局数据全局数据全局数据函数函数函数函数1.1.4面向对象程序设计语言面向对象语言发展:20世纪60年代中期,Simula67语言——面向对象语言的鼻祖,提出了对象、类的概念,并支持类的继承。20世纪70年代中期,Smalltalk语言——最有影响的面向对象语言之一,丰富了面向对象的概念。20世纪80年代中期后出现C++、VB、C#、PB、Java等多种面向对象语言1.1.4面向对象程序设计语言1、面向对象程序设计OOP观点自然界是由各种各样的实体(对象)所组成,每个对象都可以通过两个方面来刻画:描述事物状态的数据和描述事物行为的操作,应该把它们结合成一个整体,代表一个客观事物,这个整体就是对象。在对象中,描述事物行为的操作被抽象成了函数。由此可以看出,一个对象由数据和函数两部分构成。数据常被称为数据成员,函数则被称为成员函数。一个对象的数据成员往往只能通过自身的成员函数修改。

2、程序设计方法:使用面向对象的观点来描述模仿并处理现实问题。要求:高度概括、分类和抽象。3、目的:让程序员理解和管理更大、更复杂的程序,实现软件设计的产业化。1.1.4面向对象程序设计语言4、基本概念对象客观存在的实体称为对象属性描述对象的特征的数据行为对象自身的行为,对现实世界某些信息的响应.对象之间通过传递消息相互影响属性行为对象由属性和行为构成将客观事物的属性和行为抽象成数据和操作数据的函数,并把它们组合成一个不可分割的整体(即对象)的方法能够实现对客观世界的真实模拟,反映出世界的本来面目。从客观世界中抽象出一个个对象,对象之间能够传递消息,并通过特定的函数进行数据访问,禁止以任何未经允许的方式修改对象的数据,这就是面向对象程序设计的基本模式。数据成员函数成员函数数据成员函数成员函数数据成员函数成员函数对象1对象2对象3消息消息消息5、面向对象基本模式1.1.4面向对象程序设计语言classPerson{ private:charname[10];charaddr[20];charphone[11];public:voidInitData(){……}voidSearchAddr(char*name){……}; voidSearchPhone(char*name){……}; };6、通信录程序在C++中的类代码形式在C++中,struct的功能被扩展为类class,在class中不仅可以定义数据,还可以定义函数。数据与函数构成了一个整体。其中的private和public是访问权限。高级语言A=A+5structPerson{围直到再次改变精度为止。若x是int,float之类的类型,则2就是一个数字。1 cin>>ch; A ch='A'#include<iostream.对于字符常量和字符串常量,cout将把它们原样输出在屏幕上cin输入流对象,C++已将其与键盘关联属性是指实体的性质和特征,在软件中用数据来表示;7编程实作——VC++6.classPerson{但与Basic和C等语言相比,C++的规则确实多出许多,掌握它必须付出努力!cout<<17<<""<<oct<<x<<""<<18<<endl;Java:纯面向对象的语言setprecision(n)23留在输入流中等待被读取NET已经改变了这一切!20世纪60年代中期,Simula67语言——面向对象语言的鼻祖,提出了对象、类的概念,并支持类的继承。voidSearchAddr(char*name){……};下面举一个包含类(class)和对象(object)的C++程序,目的是初步了解C++是怎样体现面向对象程序设计方法的。同类对象中的数据,原则上只能用本类提供的方法(成员函数)进行处理。1.2面向对象程序语言的特征本节主要介绍类与对象的基本概念,以及面向对象程序设计的主要特征(抽象、封装、继承和多态)

1.2.1类与对象1.对象的基本概念对象:用来描述客观事物的一个实体,它是构成系统的一个基本单元。一个对象具有一组属性和行为。实体对象一台计算机抽象对象一项计划对象构成要素:1.对象标识符:是对象的名称,用来区别与其他对象。2.属性:是用来描述对象静态特征的一个数据项。3.行为:是用来描述对象动态特征和行为的一个操作函数。

对象示例1:一个“学生”对象的例子对象名:学生对象的属性:学号:123456姓名:令狐冲年龄:18专业:信管行为修改学号、姓名、专业、年龄等等1.2.1类与对象对象示例2:一个“课程”对象的例子:对象名:课程对象的属性:课程号:123456课程名:程序设计任课教师:莫名选课要求:学时:48行为获取并修改课程名、课程号、学时数、选课要求、任课教师等1.2.1类与对象2.类的基本概念类:是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提供统一的抽象描述类和对象的关系:对象是类的实例。类对象 抽象定义实例类对象举例学生学生王强课程C++程序设计类的实例——用类定义的类变量,即对象。类是对多个特性相同的对象实例的抽象,所以同一类的不同实例之间必有:相同的操作(行为)集合相同的属性集合不同的对象名,分配有不同的存储空间。1.2.1类与对象手机类与对象的关系1.2.1类与对象8810手机具有手机类的全部属性和行为,是手机类的一个对象类的确定与划分类的确定——对所遇到的对象进行分析、归纳,根据共同的特征来确定一个类。类的确定的方法:判断是否有一个以上的实例判断类的实例中是否有绝对的不同点类的划分不是绝对的,可以根据不同的实际需要确定不同的类1.2.1类与对象1.2.1类与对象类的描述类的描述——不同的OOP语言用不同的描述形式。在C++中用关键字class来定义描述一个类。classclassname{ public: //publicmembers //friendfunctionprototypes private: //privatemembers};1.2.2抽象与封装1、抽象抽象(abstract)是指有意忽略问题的某些细节和与当前目标无关的方面,以便把问题的本质表达得更清楚。把客观世界的事物划分成类的过程。抽象主要是针对实体的属性和行为。属性是指实体的性质和特征,在软件中用数据来表示;而行为是指实体能够执行的所有动作,在软件中用一个操作或函数来实现。要用软件对象组件来描述某个物理对象的全部属性和行为是不可能的。这就要求采用抽象的方法针对某个具体的应用(比如企业员工工资管理系统)提取对象与具体应用相关的属性和行为加以描述。1.2.2抽象与封装现实世界企业员工抽象属性:工作编号、姓名、基本工资、出勤率行为:设置基本工资、查询基本工资、计算实际工资ClassCCompanyStaffprivate:iStaffNumpNamefRateOfAttendfBasicSalpublic:SetBasicSal()GetBasicSal()CalculateSal()图:企业员工实体通过抽象用C++的类来描述缺点:效率低,是手工作坊式的编程。voidReadData(doubles[][6],intn){对象之间通过消息进行通信。一个对象的数据成员往往只能通过自身的成员函数修改。就是指计算机能够识别的命令,它们是一些由0和1组合成的二进制编码。classclassnamecharch2[]="HellowC++!";具有高效性、灵活性、可移植性(7)一个C++程序在VC++环境下编译运行,必须有一组与之紧密相关的文件,这组文件包含了程序的环境设置、涉及的头文件、资源等内容,称为项目文件。类将表示客观事物属性的数据结构,以及作用在这些数据结构上的操作函数封装成了一个整体。对象:用来描述客观事物的一个实体,它是构成系统的一个基本单元。函数重载:是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。C++程序的结构及数据输入与输出注:设置数制基数后,它将一直有效,直到遇到下一个基数设置。cpp文件)、头文件(.易于维护(由于数据独立,易于发现问题)由一个类可以派生出任意多个派生类,这样就形成了类的层次关系,这是现实世界中事物的分类问题在计算机中的解形式。(2)选择VC++6.structPerson{Voidmain(){voidOutData(doubles[][6],intn);获取并修改课程名、课程号、学时数、选课要求、任课教师等3 面向对象与面向过程程序设计高级语言程序的通用性和可移植性更高charch2[]="HellowC++!";应的十进制数是26)。(2)选择VC++6.Abc78缺点:数据安全性不高,程序规模变大时,设计与维护非常困难。面向对象程序设计将数据和操作数据的程序代码绑在一起构成对象具有更好的可维护性,因某类对象数据的改变只会引起该类对象操作代码的改变,而与其他类型的对象无关,这就把程序代码的修改维护局限在一个很小的范围内。汇编语言编程比机器语言简单。(4)选中“新建|C++SourceFile”列表项,在“文件”编辑框中输入源程序的名字,扩展名为.缺点:效率低,是手工作坊式的编程。在一个类中可以包括数据成员和成员函数,他们可以被指定为私有的(private)和公用的(public)属性。但与Basic和C等语言相比,C++的规则确实多出许多,掌握它必须付出努力!voidmain(){net之类的编程语言,也就容易多了。voidAveScore(doubles[][6],intn);dsw的文件是项目工作区文件(是用于组织文件、项目及项目设置的文件)。doubles[StuNum][6]; //定义保存学生成绩的数组cout<<dec<<17<<""<<x<<""<<18<<endl;程序中第18~24行是主函数。1.2.2抽象与封装2、封装性封装encapsulation是面向对象方法的一个重要原则。它有两个涵义:第一个涵义是,把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。第二个涵义也称作“信息隐蔽”,即尽可能隐蔽对象的内部细节,对外形成一个边界(或者说形成一道屏障),只保留有限的对外接口使之与外部发生联系。这主要是指对象的外部不能直接地存取对象的属性,只能通过几个允许外部使用的接口与对象发生联系。封装是通过类实现的。类将表示客观事物属性的数据结构,以及作用在这些数据结构上的操作函数封装成了一个整体。封装的形式classclassname{ public:

//publicmembers //friendfunction private:

//privatemembers};Public成员1Public成员2Public成员nPrivate一个Class定义了一种抽象的数据类型,用户只能访问Public成员,不能直接访问Private成员直接访问private是禁止的边界封装的特点:具有一个清楚的边界,对象的所有私有数据、内部程序(成员函数)细节都被固定在这个边界内。具有一个接口,描述了对象之间的相互作用、请求和响应——消息对象内部的实现代码受到封装壳的保护,其它对象不能直接修改本对象所拥有的数据和代码。封装的单位是对象。从外面看只能看到对象的外部特性,即能够受理哪些信息,具有哪些处理能力;对象的内部,即处理能力的实行和内部状态,对外是不可见的。从外面不能直接修改其内部状态,对象的内部状态只能由其自身改变。封装的优点:1.具有隐藏性和安全性(如银行的帐户)2.易于维护(由于数据独立,易于发现问题)3.封装将对象的使用者与设计者分开,使用者只需要通过接口访问对象,不必须了解对象的内部细节.提高了软件复用.封装的缺点:需要更多的输入输出函数。1.2.2抽象与封装1.2.2抽象与封装抽象与封装形成了程序接口与实现的分离函数接口将函数的实现隐藏起来(信息隐藏)实现对象行为的函数将描述对象属性的数据封装起来(数据封装)1、继承的基本概念古语:龙生龙,凤生凤,老鼠生儿会打洞继承:是对象类之间的相互关系,使得某类对象可以继承另外一类对象的特征和功能。如果一个类A继承了另外一个类B,则称类A为派生类(子类),称类B为基类(超类或父类)。派生类从它的基类中继承所有的特征(遗传),然后又添加自己的新特征(变异)。作为对客观世界分层特性的一种自然描述,继承可以让程序员充分利用已有的类去派生新类,在更大程度上实现代码的重用。1.2.3继承2、继承分类单继承(一个派生类只有一个基类)、多继承(一个派生类有多个基类)3、类的层次由一个类可以派生出任意多个派生类,这样就形成了类的层次关系,这是现实世界中事物的分类问题在计算机中的解形式。1.2.3继承4、继承的层次结构思考:B和C具有哪些成员?ABECD

a:intgetA():int

c:intgetC():intsetc():void

b:intgetB():intsetB():voidinheritance(“is-a”relation)

e:intgetE():intsete():void

d:intgetD():int1.2.3继承5、继承与封装的关系封装是指对象的封装,在对象中数据和操作总是包裹在一起的,继承不会影响对象的这种封装性,但无限制的派生继承会在一定程度上损害对象中数据的隐蔽性。1.2.3继承6、继承的优势能清晰体现相关类间的层次结构关系。继承能够减少代码和数据的重复冗余度,增强程序的重用性。增强了程序的一致性,减少了程序模块间的接口和界面,使程序更易维护。继承是自动传播程序代码的有力工具。继承是一种在普通类的基础上构造、建立和扩展新类的最有效手段。继承具有传递性 如果类C继承类B,类B继承类A,则类C继承类A“站在巨人的肩头上”。用户在开发新系统时不必从零开始,可以继承原有相似功能或者从类库中选取需要的类,再派生新类。1.2.3继承例1:车辆的继承关系车辆非机动车客车卡车轿车机动车例1:人类按职业划分的一种继承关系人学生工人教师农民中学生大学生研究生讲师教授1.2.3继承7、两个继承的案例1、多态polymorphism对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时可导致完全不同的行动,该现象称为多态性。多态与继承密切相关,通过继承产生的不同类,它们的对象可以对同一函数调用做出不同的响应,执行不同的操作,实现不同的功能,这就是多态。简单的说:单接口,多实现(即不同对象针对同一种操作会表现出不同的行为。)作用:减轻程序员负担降低程序员出错机率1.2.4

多态多态的一个案例图中同名函数area()作用在Circle、Triangle等不同类上时,将执行不同的操作,这就是多态。1.2.4

多态2、多态性的实现运行时多态性:虚函数编译时多态性:重载重载函数重载:是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。运算符重载:是指同一个运算符可以施加于不同类型的操作数上面。优点:重载进一步提高了面向对象系统的灵活性和可读性1.2.4

多态1、面向过程程序设计的基本特点方法:自顶向下,逐步求精,模块化按层次组织模块。每一模块只有一个入口,一个出口。代码和数据分离,即程序=数据结构+算法。

1.3 面向对象与面向过程程序设计C++是由AT&TBell(贝尔)实验室的BjarneStroustrup博士及其同事于20世纪80年代初在C语言的基础上引入了类的概念,并将数据抽象和面向对象等思想加进了C语言,对C语言进行了扩展和创新。cout<<dec<<17<<""<<x<<""<<18<<endl;2 a=23,ch='B',Z=3.4536<<endl;cin>>12>>x; //错误,>>后面含有常数12voidSearchAddr(char*name){……}重点放在如何实现细节过程方面,将数据与函数(过程)分开。cout<<17<<""<<oct<<x<<""<<18<<endl;形式:主模块+若干个子模块

(如C:main()+子函数)。stud2.};//类的声明结束5、C++程序的构成和书写形式charch2[]="HellowC++!";cout<<17<<""<<oct<<x<<""<<18<<endl;它有两个涵义:第一个涵义是,把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。C++提供了许多控制数据输出格式的函数和操纵符,这些操纵符或操纵函数是在iomanip.h中定义的,应该在引用它们的程序中包含该头文件.语句 输入 内存变量的值由若干个执行语句组成,用来进行有关的操作,以实现函数的功能。加A5net之类的编程语言,也就容易多了。cin>>x;2、面向对象程序设计它将数据和操作数据的过程(函数)绑在一起,形成一个相互依存、不可分离的整体(即对象),从同类对象中抽象出共性,形成类。同类对象中的数据,原则上只能用本类提供的方法(成员函数)进行处理。类通过封装将接口与实现分离开来,通过接口与外界联系。对象之间通过消息进行通信。1.3 面向对象与面向过程程序设计3、两种程序方法的对比1.3 面向对象与面向过程程序设计面向对象程序设计将数据和操作数据的程序代码绑在一起构成对象具有更好的可维护性,因某类对象数据的改变只会引起该类对象操作代码的改变,而与其他类型的对象无关,这就把程序代码的修改维护局限在一个很小的范围内。1.4 C++与面向对象程序设计1、面向对象程序设计语言的基本情况最早最成熟的领域萌芽于60年代(Simula),成熟于80年代70年代,纯面向对象语言,smalltalk常见面向对象的语言Java:纯面向对象的语言VB.Net:可视化程序设计早期的VB或许算不上真正的面向对象程序设计语言,不具备面向对象程序的一些特征,但VB.NET已经改变了这一切!C#:具有VB和VC++的特征C++其它常用的具有面向对象特征的语言BorlandDelphi、PowerBuilder、VisualFoxPro……1.4 C++与面向对象程序设计2、C++简史C++是由AT&TBell(贝尔)实验室的BjarneStroustrup博士及其同事于20世纪80年代初在C语言的基础上引入了类的概念,并将数据抽象和面向对象等思想加进了C语言,对C语言进行了扩展和创新。称为“带类的C”。到1983年,“带类的C”正式改名为C++。C++是由C发展而来的,与C兼容。用C语言写的程序基本上可以不加修改地用于C++。从C++的名字可以看出它是C的超集。C++既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。3、C++常用领域系统软件设备驱动程序图形学用户界面……1.4 C++与面向对象程序设计4、C++特征兼容C语言,支持面向过程的程序设计具有高效性、灵活性、可移植性丰富的数据类型支持面向对象程序设计5、常见C++编译系统C++BuilderVC++VC++.net1.5C++程序的结构1、C++程序的构成声明部分主函数部分函数定义2、C++程序文件头文件:.h源文件:.cpp3、程序结构的例程如下1.5C++程序的结构1.5C++程序的结构对例程的补充:C++的注释///*……*/C++的函数需要先声明,然后才能调用下面举一个包含类(class)和对象(object)的C++程序,目的是初步了解C++是怎样体现面向对象程序设计方法的。例:实现学生学号,成绩的输入与显示功能.#include<iostream.h>//预处理命令usingnamespacestd;//使用命名空间stdclassStudent//声明一个类,类名为Student{private://以下为类中的私有部分

intnum;//私有变量numintscore;//私有变量score

public://以下为类中的公用部分

voidsetdata()//定义公用函数setdata{cin>>num;//输入num的值

cin>>score;}//输入score的值

voiddisplay()//定义公用函数display{cout<<″num=″<<num<<endl;//输出num的值

cout<<″score=″<<score<<endl;}//输出score的值};//类的声明结束Studentstud1,stud2;//定义stud1和stud2为Student类的变量,称为对象intmain()//主函数首部{stud1.setdata();//调用对象stud1的setdata函数

stud2.setdata();//调用对象stud2的setdata函数

stud1.display();//调用对象stud1的display函数

stud2.display();//调用对象stud2的display函数return0;}具有“类”类型特征的变量称为“对象”(object)。程序中第18~24行是主函数。程序运行情况如下:100198.5↙(输入学生1的学号和成绩)100276.5↙(输入学生2的学号和成绩)num=1001(输出学生1的学号)score=98.5(输出学生1的成绩)num=1002(输出学生2的学号)score=76.5(输出学生2的成绩)4、C++程序运行步骤C++程序的结构和书写格式归纳如下:

(1)一个C++程序可以由一个程序单位或多个程序单位构成。每一个程序单位作为一个文件。在程序编译时,编译系统分别对各个文件进行编译,因此,一个文件是一个编译单元。(2)在一个程序单位中,可以包括以下几个部分:①预处理命令。上节4个程序中都包括#include命令。②全局声明部分(在函数外的声明部分)。在这部分中包括对用户自己定义的数据类型的声明和程序中所用到的变量的定义。③函数。函数是实现操作的部分,因此函数是程序中必须有的和最基本的组成部分。每一个程序必须包括一个或多个函数,其中必须有一个(而且只能有一个)主函数(main函数)。但是并不要求每一个程序文件都必须具有以上3个部分,可以缺少某些部分(包括函数)。5、C++程序的构成和书写形式(3)一个函数由两部分组成:①函数首部,即函数的第一行。包括函数名、函数类型、函数属性、函数参数(形参)名、参数类型。一个函数名后面必须跟一对圆括号,函数参数可以缺省,如intmain()。②函数体,即函数首部下面的大括号内的部分。如果在一个函数中有多个大括号,则最外层的一对{}为函数体的范围。函数体一般包括:局部声明部分(在函数内的声明部分)。包括对本函数中所用到的类型、函数的声明和变量的定义。对数据的声明既可以放在函数之外(其作用范围是全局的),也可以放在函数内(其作用范围是局部的,只在本函数内有效)。执行部分。由若干个执行语句组成,用来进行有关的操作,以实现函数的功能。5、C++程序的构成和书写形式(4)语句包括两类。一类是声明语句,另一类是执行语句。C++对每一种语句赋予一种特定的功能。语句是实现操作的基本成分,显然,没有语句的函数是没有意义的。C++语句必须以分号结束。(5)一个C++程序总是从main函数开始执行的,而不论main函数在整个程序中的位置如何。(6)类(class)是C++新增加的重要的数据类型,是C++对C的最重要的发展。有了类,就可以实现面向对象程序设计方法中的封装、信息隐蔽、继承、派生、多态等功能。在一个类中可以包括数据成员和成员函数,他们可以被指定为私有的(private)和公用的(public)属性。私有的数据成员和成员函数只能被本类的成员函数所调用。5、C++程序的构成和书写形式(7)C++程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。C++程序没有行号,也不像FORTRAN或COBOL那样严格规定书写格式(语句必须从某一列开始书写)。(8)一个好的、有使用价值的源程序都应当加上必要的注释,以增加程序的可读性。C++还保留了C语言的注释形式,可以用“/*……*/”对C++程序中的任何部分作注释。在“/*”和“*/”之间的全部内容作为注释。用“//”作注释时,有效范围只有一行,即本行有效,不能跨行。而用“/*……*/”作注释时有效范围为多行。只要在开始处有一个“/*”,在最后一行结束处有一个“*/”即可。因此,一般习惯是:内容较少的简单注释常用“//”,内容较长的常用“/*……*/”。5、C++程序的构成和书写形式1.6数据的输入与输出本节主要介绍C++程序中数据输入输出的方法,是C++程序设计的基础。应该掌握流的概念iostream.hcincoutendl1.6.1流的概念1、C及C++中的流概念I/O(input/output,输入/输出)数据是一些从源设备到目标设备的字节序列,称为字节流。除了图像、声音数据外,字节流通常代表的都是字符,因此在多数情况下的流(stream)是从源设备到目标设备的字符序列,A8bctyx1234源设备目标设备字符序列从源设备连续不断地流向目标设备,最后按先流出先到达的有序方式汇聚在目标设备中,如同河流一样,故此叫流。1.6.1流的概念输入流输入流(inputstream)是指从输入设备流向内存的字节序列。输出流输出流(outputstream)是指从内存流向输出设备的字节序列。C++中的输入输出流iostream.hcin输入流对象,C++已将其与键盘关联cout输出流对象,C++已将其与显示器关联1.6.2cin和析取运算符>>1、cin的用途cin读作(see-in)是一个输入流对象,用于从键盘输入数据。在C++程序中,也可以使用c语言中常用的scanf函数输入数据,但cin更简单。2、cin的用法输入单个变量的值cin>>x;输入多个变量的值cin>>x1>>x2>>x3>>x4……>>xn其中x,x1……x2可以是内置数据类型如int,char,float,double等。1.6.2cin和析取运算符>>3、用cin时的注意事项在一条cin语句中同时为多个变量输入数据。在输入数据的个数应当与cin语句中变量个数相同,各输入数据之间用一个或多个空白(包括空格、回车、Tab)作为间隔符,全部数据输入完成后,按Enter键结束。

在析取运算符>>后面只能出现变量名,下面的语句是错误的。cin>>"x=">>x; //错误,>>后面含有字符串"x="cin>>12>>x; //错误,>>后面含有常数12cin>>'x'>>x; 1.6.2cin和析取运算符>>cin具有自动识别数据类型的能力,析取运算>>将根据它后面的变量的类型从输入流中为它们提取对应的数据。比如:cin>>x;假设输入数据2,析取运算符>>将根据其后的x的类型决定输入的2到底是数字还是字符。若x是char类型,则2就是字符;若x是int,float之类的类型,则2就是一个数字。再如,若输入34,且x是char类型,则只有字符3被存储到x中,4将继续保存在流中;若x是int或float,则34就会存储x中。

输出:1234567812345678利用它可以输入、编辑源程序,进行程序的编译、调试、链接,最后生成可执行的命令程序。例1:人类按职业划分的一种继承关系stud2.对象示例1:一个“学生”对象的例子对象标识符:是对象的名称,用来区别与其他对象。intnum;//私有变量num语句是实现操作的基本成分,显然,没有语句的函数是没有意义的。11 cin>>a>>ch 132 a=132,计算机等待输入ch的值作为对客观世界分层特性的一种自然描述,继承可以让程序员充分利用已有的类去派生新类,在更大程度上实现代码的重用。cpp文件)、头文件(.数值型常量数据和数值变量可以利用cout直接输出,但在连续输入多个net之类的编程语言,也就容易多了。//下面的cout语句在屏幕上输出科目名称在这部分中包括对用户自己定义的数据类型的声明和程序中所用到的变量的定义。intnum;//私有变量num12900谁知道这是个什么数据呢?不仅大大降低了程序设计的难度,而且也使程序易被人们理解。cout<<ch1;7编程实作——VC++6.4A”并按Enter键,cout<<"x1="<<x1<<""<<"x2="<<x2<<""<<"x3="<<x3;1.6.2cin和析取运算符>>数值型数据的输入在读取数值型数据时,析取运算符>>首先略掉数据前面的所有空白符号,如果遇到正、负号或数字,就开始读入,包括浮点型数据的小数点,并在遇到空白符或其他非数字字符时停止。例如:intx1;doublex2;charx3;cin>>x1>>x2>>x3;假如输入“35.4A”并按Enter键,cout<<"x1="<<x1<<""<<"x2="<<x2<<""<<"x3="<<x3;x1是35;x2是.4;x3是'A'在输入数据时,一定要注意数据之间间隔符的正确输入1.6.2cin和析取运算符>>输入数值型数据时,还要注意不同进制数据的输入方法十进制整数,直接输入数据本身,如78。十六进制整数,在要输入的数据前加0x或0X,如0x1A(对应的十进制数是26)。八进制整数,在输入的数据前加0,如043(代表十进制数的35)例:intx;cin>>x;cout<<“x=”<<x<<endl;假如输入“0x1A”回车,则显示结果为26(系统自动按十进制结果显示)1.6.2cin和析取运算符>>4、输入数据案例分析【例1-2】假设有变量定义语句如下:inta,b;doublez;charch;下面的语句说明数据输入的含义。语句 输入 内存变量的值

1 cin>>ch; A ch='A'2 cin>>ch; AB ch='A',而'B'被保留在输入流中等待被读取

3 cin>>a; 32 a=324 cin>>a; 32.23 a=32,.23留在输入流中等待被读取

5 cin>>z; 76.21 z=76.216 cin>>z; 65 z=65.07 cin>>a>>ch>>z 23B3.2 a=23,ch='B',Z=3.28 cin>>a>>ch>>z 23B3.2 a=23,ch='B',Z=3.29cin>>a>>b>>z 2332 a=23,b=32,等待输入下一个数据存入z10 cin>>a>>z 23.224 a=2,z=3.2,24被保留在输入流中等待被读取11 cin>>a>>ch 132 a=132,计算机等待输入ch的值12 cin>>ch>>a 132 ch='1',a=321.6.3cout和插入运算符<<cout的用途cout(读作see-out)是一个输出流对象,已被C++默认关联到显示器,用于在屏幕上输出数据。在C++程序中,也可使用C语言的printf输出数据,但cout更简单。cout的用法cout<<x其中x可是以内置数据类型如int,char,float,double等。1.6.3cout和插入运算符<<1.输出字符类型的数据对于字符变量和字符串变量,cout将把变量的值输出到显示屏幕上。对于字符常量和字符串常量,cout将把它们原样输出在屏幕上【例1-3】用cout输出字符数据。//Eg1-3.cpp#include<iostream.h>voidmain(){ charch1='c'; charch2[]="HellowC++!"; cout<<ch1; cout<<ch2; cout<<"C"; cout<<"Helloweveryone!";}1.6.3cout和插入运算符<<2.连续输出cout能够同时输出多个数据,用法如下:cout<<x1<<x2<<x3<<…;其中,x1,x2和x3可以是相同或不同类型的数据。此命令将依次把x1,x2和x3的值输出到显示器上。

例:cout<<ch1<<ch2<<"C"<<"Helloweveryone!";与C语言一样,在C++程序中也可以将一条命令写在多行上。比如,上面的语句也可写成下面的形式:cout<<ch1 <<ch2 <<"C" <<"Helloweveryone!";1.6.3cout和插入运算符<<3、输出换行在cout语句中换行可用:“\n”或endl【例1-4】在例1-3的输出语句中增加换行符。//Eg1-4.cpp#include<iostream.h>voidmain(){ charch1='c'; charch2[]="HellowC++!"; cout<<ch1<<endl; cout<<ch2<<"\n"; cout<<"C"<<endl; cout<<"Helloweveryone!\n"; }1.6.3cout和插入运算符<<4、输入数据类型数据数值型常量数据和数值变量可以利用cout直接输出,但在连续输入多个数据时,应注意在数据之间插入间隔符。如intx1=23;floatx2=34.1;doublex3=67.12;cout<<x1<<x2<<x3<<900;其中的cout语句将在屏幕上输出,2334.167.12900谁知道这是个什么数据呢?cout<<“x1=”<<x1<<“

”<<“x2=”<<x2<<“

”<<“x3=”<<x3<<endl<<900<<endl;结果为:x1=23x2=34.1x3=67.129001.6.4输出格式控制符在程序运行过程中,常常需要按照一定的格式输出其运行结果,数据输出格式的设置是程序设计的一个重要内容,影响到程序结果的清晰性.C++提供了许多控制数据输出格式的函数和操纵符,这些操纵符或操纵函数是在iomanip.h或iostream.h中定义的.本节介绍的setprecision,setw,left,right都是在iomanip.h中定义的,应该在引用它们的程序中包含该头文件.1.6.4输出格式控制符1、数制基数hex:16进制,oct:8进制,dec:10进制【例1-5】输出不同进制的数据。#include<iostream.h>voidmain(){intx=34;cout<<hex<<17<<""<<x<<""<<18<<endl;cout<<17<<""<<oct<<x<<""<<18<<endl;cout<<dec<<17<<""<<x<<""<<18<<endl;}注:设置数制基数后,它将一直有效,直到遇到下一个基数设置。1.6.3cout和插入运算符<<2、其它输出格式控制符设置浮点数的精度

setprecision(n)其中,n代表有效数位,包括整数的位数和小数的位数。有效范围直到再次改变精度为止。例:Cout<<setprecision(3)<<3.1415926<<“

”<<2.4536<<endl;输出为:3.142.452、其它输出格式控制符设置输出域宽和对齐方式setw(n)

其中,n是输出数据占用屏幕宽度的字符个数,在默认情况下,输出数据按右对齐。若输出数据的位数比n小,则左边留空。若输出数据的实际位数比n大,则输出数据将自动扩展到所需占用的列数。注:setw()只对紧随其后的一个输出数据有效.例:cout<<“1234567812345678”<<endl;cout<<setw(8)<<23.27<<setw(8)<<78<<endl;cout<<setw(8)<<“Abc”<<78<<endl;输出:123456781234567823.2778Abc782、其它输出格式控制符设置对齐方式Setiosflags(longf);resetiosflags(longf);这两个操纵函数用于设置或取消输入/输出数据的各种格式.其中表示左对齐的常数值是ios::left,表示右对齐的常数值是ios::right.这两个常数可作为以上两个操纵符的参数,用于设置输出数据的对齐方式.当用setiosflags()设置输出对齐方式成功后,将一直有效,直到用resetiosflags()取消它.1.6.3cout和插入运算符<<【例1-6】用setiosflags和

resetiosflags设置

和取消输出数据的对齐方式。//Eg1-6.cpp#include<iostream.h> #include<iomanip.h> voidmain(){ cout<<“123456781234567812345678”<<endl; cout<<setiosflags(ios::left)<<setw(8) <<456<<setw(8)<<123<<endl; cout<<resetiosflags(ios::left)<<setw(8)<<123<<endl; }1.7编程实作——VC++6.0编程简介本节主要以案例方式介绍VC++的编程环境,及在VC++6.0环境下设计C++程序的过程。本节介绍的是一种基于控制台的VC++程序设计方式,是一种非常简略的方式1.7编程实作——VC++6.0编程简介1、关于C++编译器支持C++程序设计的编译程序很多,常见的有TurboC++、BorlandC++和VisualC++等。VisualC++是微软公司的产品,简称VC++。VC++6.0是微软公司1998年推出的基于Windows的集成开发环境,它提供了编写程序源代码的编辑器,创建各类资源文件(如对话框、图标、菜单等)的资源编辑器,具有编辑、编译、链接等功能。利用它可以输入、编辑源程序,进行程序的编译、调试、链接,最后生成可执行的命令程序。1.7编程实作——VC++6.0编程简介2、例题描述【例1-7】某次考试成绩如下,编写程序计算每位同学的平均分。要求成绩从键盘输入,程序输出结果的形式与下面相同,但要输出每位同学的平均分。

语文数学政治化学英语平均分学生16776878976

温馨提示

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

评论

0/150

提交评论