




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++面向对象程序设计
第一章绪论面向对象思想的由来面向对象程序设计面向对象程序设计语言C++与C语言的关系§1.1面向对象思想的由来
面向对象技术追求的是软件系统对现实世界的直接模拟,尽量实现将现实世界中的事物直接映射到软件系统的解空间。§1.1面向对象思想的由来现实问题空间面向对象解空间物质:一辆白色的自行车意识:自行车具体事物:一个对象——自行车的实例抽象概念:自行车类§1.2面向对象程序设计一、结构化程序设计(SP,StructureProgramming)结构化程序设计思路是:自顶向下,逐步求精;其程序结构是按功能划分若干个基本模块,这些模块形成一个树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。§1.2面向对象程序设计一、结构化程序设计(SP,StructureProgramming)例如:计算一个班中所有学生计算机的平均成绩,按照结构化程序设计的思想,可以将其拆分为以下的子任务:找出一名学生的计算机成绩计算共有多少名学生计算此科目的单科总分用学生总数去除单科总成绩★找出一个学生的档案★读出计算机的分数★把此分数加到部分和上★读出下一名学生的档案§1.2面向对象程序设计一、结构化程序设计(SP,StructureProgramming)缺点结构化程序设计把数据和过程分离为相互独立的实体,程序员在编程时必须考虑所要处理数据的格式。对于不同的数据格式即使要做同样的处理或相同的数据格式要做不同的处理都需要编写不同的程序。因此结构化程序的可重用性不好。而且数据与程序始终保持相容也成为程序员的一个负担。§1.2面向对象程序设计二、面向对象程序设计(OOP,Object-OrientedProgramming)优点1面向对象程序设计将数据及对数据的操作放在一起,作为一个相互依存,不可分割的整体来处理,即对象。它采用数据抽象和信息隐藏技术。它将对象及对象的操作抽象成一种新的数据类型——类,并且考虑不同对象之间的联系和对象类的重要性。1.面向对象程序设计的优越性§1.2面向对象程序设计二、面向对象程序设计(OOP,Object-OrientedProgramming)自行车对象数据抽象自行车类属性:架子尺寸车轮尺寸颜色原材料操作:转弯移动修理§1.2面向对象程序设计二、面向对象程序设计(OOP,Object-OrientedProgramming)优点2面向对象程序设计的优越性还表现在,它有希望解决软件工程的两个主要问题——软件复杂性和软件生产率的提高。此外它还符合人类的思维习惯,能够自然地表现现实世界的实体和问题,它对软件开发过程具有重要意义。1.面向对象程序设计的优越性§1.2面向对象程序设计二、面向对象程序设计(OOP,Object-OrientedProgramming)2.面向对象程序设计的几个重要概念封装和数据隐藏继承和重用多态性§1.2面向对象程序设计二、面向对象程序设计(OOP,Object-OrientedProgramming)封装和数据隐藏:C++通过建立用户自定义类型(类)支持封装性和数据隐藏。完好定义的类一旦建立,就可看成是完全封装的实体,可以作为一个整体单元使用。类的实际内部工作应当隐藏起来,使用完好定义的类的用户不需要知道类是如何工作的,只要知道如何使用它就行。§1.2面向对象程序设计二、面向对象程序设计(OOP,Object-OrientedProgramming)继承和重用:C++采用继承支持重用的思想,程序可以在扩展现有类型的基础上声明新类型。新子类是从现有类型派生出来的,称为派生类。开发者在设计软件时可以利用一些已经被精心设计好并且经过测试的代码,这些可重用的代码被组织和存放在程序设计环境的类库中。高质量的可重用代码能有效地降低软件复杂度和提高开发效率。§1.2面向对象程序设计二、面向对象程序设计(OOP,Object-OrientedProgramming)多态性:C++通过继承的方法构造类,采用多态性为每个类指定表现行为。大学生中学生继承计算成绩计算成绩语文数学英语…高等数学计算机普通物理…§1.2面向对象程序设计二、面向对象程序设计(OOP,Object-OrientedProgramming)多态性:C++通过继承的方法构造类,采用多态性为每个类指定表现行为。
☆继承性和多态性的组合,可以轻易生成一系列虽类似但独一无二的对象。由于继承性,这些对象共享许多相似的特征。但由于多态性,一个对象可以有独特的表现方式,面对另一个对象有另一个表现方式。§1.3面向对象程序设计语言LISP家族SimulaSmalltalkC家族LISP家族SimulaSmalltalkC家族LISP是50年代开发出来的一种语言,它以表处理为特色,是一种人工智能语言。Simula是60年代开发出来的,在Simula中引入了几个面向对象程序设计语言中最重要的概念和特性,即数据抽象的概念、类和继承性。Smalltalk起源于Simula语言,是一个真正的面向对象程序语言,它体现了纯粹的面向对象的设计思想,是最纯的面向对象程序语言。
在80年代,C语言成为一种及其流行、非常广泛的语言。为了满足管理程序的复杂性需要,1980年,贝尔实验室的BjarneStroustrup开始对C进行改进和扩充。最初的成果称为“带类的C”,1983年正式取名为C++,在经历了三次C++修订后,于1994年制定了ANSIC++标准的草案。以后又经过不断完善,成为目前的C++。MSC++TurboC++BorlandC++VisualC++§1.4C++与C语言的关系一、C语言的局限1.C类型检查机制相对较弱,这使得程序中的一些错误不能在编译时发现。2.C本身几乎没有支持代码重用的语言结构,因此一个程序员精心设计的程序,很难为其他程序所用。3.当程序的规模达到一定的程度时,程序员很难控制程序的复杂性。§1.4C++与C语言的关系二、C++与C语言的关系1.C++保持与C语言的兼容这种兼容性表现在许多C语言编写的程序不经修改就可以为C++所用,用C语言编写的许多库函数和应用软件也都可以用于C++。§1.4C++与C语言的关系二、C++与C语言的关系2.C++对C语言做了许多改进①增加了一些新的运算符,使得C++应用起来更方便。例如:::newdelete.*->*等。§1.4C++与C语言的关系二、C++与C语言的关系2.C++对C语言做了许多改进②改进了类型系统,增加了安全性,C语言中的类型转换很不严格。C++规定类型转换多采取强制转换,又规定函数的说明必须用原型,并对默认类型做了某些限制,还增强了编译系统检查类型的能力。§1.4C++与C语言的关系二、C++与C语言的关系2.C++对C语言做了许多改进③引进了引用概念,使用引用作函数参数带来很大方便。§1.4C++与C语言的关系二、C++与C语言的关系2.C++对C语言做了许多改进④允许函数重载,允许设置默认参数,这些措施提高了编程的灵活性,减少冗余性。又引进了内联函数的概念,提高了程序的效率。§1.4C++与C语言的关系二、C++与C语言的关系2.C++对C语言做了许多改进⑤对变量说明更加灵活了。C语言只允许在函数体或分程序内,先是对变量的说明语句,再是执行语句,两者不可交叉引用。C++打破这一限制,可以根据需要随时对变量加以说明。§1.4C++与C语言的关系二、C++与C语言的关系3.C++与C语言的本质差别C++面向对象的语言C语言面向过程的语言§1.4C++与C语言的关系二、C++与C语言的关系4.C++面向对象的新特性①C++支持数据封装数据封装类对象工具支持实现具体§1.4C++与C语言的关系二、C++与C语言的关系4.C++面向对象的新特性②
C++类中包含私有、公有和保护成员私有成员只有在类中说明的函数才能访问公有成员类外的函数也可以访问保护成员只有该类的派生类才能访问§1.4C++与C语言的关系二、C++与C语言的关系4.C++面向对象的新特性③
C++通过发送消息来处理对象每个对象对接收到的消息给出一个相应的方法予以响应。方法在类定义中使用函数来定义,在C++中使用一种类似于函数调用的机制把消息发送到一个对象上。§1.4C++与C语言的关系二、C++与C语言的关系4.C++面向对象的新特性④
C++允许使用友元破坏封装性类中的私有成员是不允许类外面的任何函数访问的,但是友元打破了这种封装性。§1.4C++与C语言的关系二、C++与C语言的关系4.C++面向对象的新特性⑤
C++允许函数名和运算符重载函数名重载和运算符重载都属于多态性。多态性是指相同的语言结构可以代表不同类型的实体或者对不同类型的实体进行操作,C++支持多态性。§1.4C++与C语言的关系二、C++与C语言的关系4.C++面向对象的新特性⑥
C++支持继承性一个类可以根据需要生成派生类(或子类)。派生类继承了基类的所有方法,另外派生类自身还可以定义所需要的不包含在父类中的新方法。§1.4C++与C语言的关系二、C++与C语言的关系4.C++面向对象的新特性⑥
C++支持动态联编
C++可以通过定义虚函数来支持动态联编。动态联编是多态性的一个重要特征。第二章C++语言初步初识C++程序C++语言的基本符号C++语言的词汇C++程序的基本框架运行C++程序C++的运行环境第二章C++语言初步§2.1初识C++程序一、程序实例//*************************//**thisisasimplestprogram**//*************************#include<iostream.h>voidmain(){cout<<“Iamastudent.\n”;}运行结果为:
Iamastudent.注释编译预处理程序主体第二章C++语言初步§2.1初识C++程序一、程序实例注释编译预处理程序主体序言注释注解性注释用于程序开头,说明程序或文件的名称、用途、编写时间、编写人以及输入输出说明等。用于程序中难懂的地方。C++的注释为“//”之后的内容,直到换行。另外还兼容C的注释,即“/*…*/”,可以占用多行。在生成可执行程序前,C++忽略注释,把每个注释都视为一个空格。第二章C++语言初步§2.1初识C++程序一、程序实例注释编译预处理程序主体
每个以符号“#”开头的行,称为编译预处理行。如:
#include<iostream.h>作用是在编译之前将文件iostream.h的内容增加到程序中,以作为其一部分。
iostream.h是系统定义的一个“头文件”,它设置了C++的I/O相关环境,定义输入输出流对象cout和cin等。第二章C++语言初步§2.1初识C++程序一、程序实例注释编译预处理程序主体voidmain(){cout<<“Iamastudent.\n”;}main()表示主函数,每一个C++程序都必须有一个main()函数,main()作为程序的入口。void表示该main()函数没有返回值函数体第二章C++语言初步§2.1初识C++程序一、程序实例注释编译预处理程序主体voidmain(){cout<<“Iamastudent.\n”;}函数头函数体+=函数定义描述一个函数所执行算法的过程称为函数定义。第二章C++语言初步§2.1初识C++程序一、程序实例注释编译预处理程序主体voidmain(){cout<<“Iamastudent.\n”;}
main——函数名全为小写字母构成,C++程序中的名字是大小些“敏感”的。
cout——标准输出的流设备,它是C++预定的对象。当程序要在设备上进行输出时,就需要在程序中指定对象。
<<——输出操作符,表示将该操作符右边的数据送到显示设备上。
程序中用双括号括起的数据“Iamastudent.\n”称为字符串常量。;表示一个语句的结束/(反斜杠)——称为转义符,表示要输出特殊字符。字符串中遇到反斜杠时,下一个字符与反斜杠相结合,形成转义序列。转义序列说明\n\t\r\a\\\”换行符,使屏幕光标移到屏幕中下一行开头水平制表符,使光标移到下一制表位回车符,使光标移到当前行开头警告,发出系统警告声音打印反斜杠符打印双引号相关链接:编程技巧:1.
让函数打印的最后一个字符为换行符\n,可以保证函数使屏幕光标移到屏幕下一行开头。这种习惯能促进软件复用,这是软件开发环境中的关键目标。2.将每个函数的整个函数体在定义函数体的花括号中缩排一级,可使程序的函数结构更加明显,使程序更易读。§2.1初识C++程序二、I/O语句1.标准输出语句当程序需要在屏幕上显示输出时,可以使用插入操作符“<<”向cout中插入字符。cout<<“Iamastudent.”;#include<iostream.h>voidmain(){cout<<“MynameisJone.\n”;cout<<“theIDis”;cout<<2;cout<<endl;}§2.1初识C++程序二、I/O语句1.标准输出语句cout<<“MynameisJone.\n”;<<“theIDis”;<<2;<<endl;cout<<“MynameisJone.\n”<<“theIDis”<<2<<endl;§2.1初识C++程序二、I/O语句2.标准输入语句
cin与cout类似,是标准输入文件(指键盘)的名字。“>>”称为提取运算符。cin可自动识别变量位置和类型。例如:cin>>palstring;inti;floatf;longl;cin>>i>>f>>l;定义一个整型变量定义一个浮点型变量定义一个长整型变量cin能够知道抽取的变量的类型§2.1初识C++程序二、I/O语句3.使用控制符⑴setw(n):控制输出间隔。①如果一个值需要比setw(n)确定的字符数更多的字符,则该值将使用它所需要的所有字符。说明floatamount=3.14159;cout<<setw(4)<<amount<<endl;运算结果为:3.14159§2.1初识C++程序二、I/O语句3.使用控制符⑴setw(n):控制输出间隔。②如果一个值的字符数比setw(n)确定的字符数少,则在数字字符前显示空白。说明cout<<setw(8)<<10<<endl;运算结果为:10﹄︼︼︼§2.1初识C++程序二、I/O语句3.使用控制符⑴setw(n):控制输出间隔。③setw(n)仅影响与之相邻的下一个数的输出,并不保留效力。说明cout<<setw(8)<<10<<20<<endl;运算结果为:1020﹄︼︼︼cout<<setw(8)<<10<<setw(8)<<20<<endl;运算结果为:1020﹄︼︼︼§2.1初识C++程序二、I/O语句3.使用控制符⑵setfill:用来确定一个非空格的字符。#include<iostream.h>#include<iomanip.h>voidmain(){cout<<setfill(’*’);<<setw(2)<<21<<endl<<setw(3)<<21<<endl<<setw(4)<<21<<endl;cout<<setfill(’’);}运行结果为:21*21**21§2.1初识C++程序二、I/O语句4.printf和scanf如果采用标准输出函数printf()和输入函数scanf(),则应把程序开始的预处理指令改为:#include<stdio.h>§2.2C++语言的基本符号一、基本符号分类每种语言都用一组字符来构造有意义的语句。C++程序是用下列字符所组成的字符写成的:大小写英文字母:a~z,A~Z数字字符:0~9特殊字符:空格!#%^&*_(下划线)
-+=~<>/\|.,:;?’”()[]{}$@§2.2C++语言的基本符号二、基本符号的ASCII编码P31例:charcl=‘a’;inti=cl;cout<<cl<<endl<<i;输出结果:a97§2.3C++语言的词汇一、关键字(保留字)关键字是一类有特定的专门含义的单词。在程序中用到的其他名字(标识符)不能与C/C++的关键字有相同的拼法和大小写。关键字也不能重新定义。注§2.3C++语言的词汇一、关键字(保留字)①C++的关键字一般包含了几乎所有的C语言的关键字说明
②C++的关键字集是在不断变化的③不同版本的C++的关键字集可能不同补充:基本关键字表asmautobreakcasecatchcharclassconstcontinuedefaultdeletedodoubleelseenumexternfloatforfriendgotoifinlineintlongnewoperatorprivateprotectedpublicregisterreturnshortsignedsizeofstaticstructswitchtemplatethisthrowtrytupedefunionunsignedvirtualvoidvolatilewhile§2.3C++语言的词汇二、标识符标识符是由程序员为程序中的各种成份——变量,有名常量,用户定义的类型,枚举类型的值,函数及其参数,类,对象等所起的名字。说明标识符必须符合以下规则:§2.3C++语言的词汇标识符必须符合的规则:1.不能是C++关键字,如for,if,case等不可作标识符;2.标识符中字母区分大小写,如Abc与abc被认为是两个不同的标识符。而关键字不区分大小写,如for,FOR,For,foR都认为是同一关键字;3.第一个字符必须是字母或下划线;§2.3C++语言的词汇标识符必须符合的规则:4.不要太长,一般不超过31个字符为宜(太长则书写困难,反为不美);5.不能以数字开头。如C5合法,而5C则为非法;6.中间不能有空格。如map合法,而map则为非法;§2.3C++语言的词汇标识符必须符合的规则:7.变量名不能包含.;,”’+-之类的特殊符号。实际上,标识符中除了能使用26个英文字母的大小写和数字之外,只能使用下划线_。numberOfStudentnumOfStudentDx6y命名的方式决定了程序书写的风格补充:介绍几种常用的命名方式1.骆驼表示法:mycarmy-carmyCar易读,但是下划线书写困难标识符中不能出现空格补充:介绍几种常用的命名方式2.匈牙利标记法:iMycaripMycar表示整型指针变量表示整型变量在每个变量名的前面加上若干表示类型的字符§2.3C++语言的词汇三、字面常量
常量:C++程序中的常量是指固定不变的量。字面常量有名常量例如:圆周率pai=3.1416Int型常量float型常量char型常量字符串常量§2.3C++语言的词汇三、字面常量即整型常量,可用3种形式表示:⑴Int型常量:①十进制整数。如123,-456,0,79834等。如果某个整数超出了一般整数的表示范围,系统可自动按长整型(longint)来处理。如79834L表示长整型。若此字面整数超出了长整型范围,系统将发出警告。注§2.3C++语言的词汇三、字面常量即整型常量,可用3种形式表示:⑴Int型常量:②八进制整数以零开头的整数表示八进制整数。如0123,表示(123)8。§2.3C++语言的词汇三、字面常量即整型常量,可用3种形式表示:⑴Int型常量:③十六进制整数以零和字母x开头或以零和字母X开头的整数表示十六进制整数。如0x123或0X123,表示(123)16。§2.3C++语言的词汇三、字面常量即实型常量,实数在C++中就是浮点数。实数有2种表示:⑵float型常量:①定点数形式:如0.123,.456,0.0等。②指数形式:如123e5,123E5都表示123×105。§2.3C++语言的词汇三、字面常量⑵float型常量:单精度(float)48f或F后缀34.5f双精度(double)810默认34.5长双精度(longdouble)1019l或L后缀34.5e2L种类占用内存有效数字表示形式举例§2.3C++语言的词汇三、字面常量即字符常量,是用单引号括起来的一个字符。如‘a’,‘?’等。⑶char型常量:
C++还允许使用一种特殊形式的字符常量,即以“\”开头的字符序列,如‘\n’。注0表示一个整数值‘0’表示一个数字字符,其ASCII码等于48或0x30。§2.3C++语言的词汇三、字面常量即用双引号括起来的字符序列。⑷字符串常量:
①字符常量和字符串常量是不同的。说明HELLO‘\0’H§2.3C++语言的词汇三、字面常量即用双引号括起来的字符序列。⑷字符串常量:②不能将字符串常量赋给字符常量。例如:说明charc=“abc”;//error§2.3C++语言的词汇三、字面常量即用双引号括起来的字符序列。⑷字符串常量:说明③单个字符的字符串与字符在输出的表示上没有差别,因为字符串输出时,C++并不把0结束符一同输出。例如:cout<<“a”<<endl;cout<<‘a’<<endl;输出结果为:aa§2.3C++语言的词汇四、运算符说明①C++语言的运算符和运算形式很丰富,要尤其注意一些包含混和操作的运算符。如++、--、+=、-=等的功能和用法。②C++语言的某些运算符有多种含义。如*的用法。(第三章详述)§2.4C++程序的基本框架一、SP框架main用户定义函数全局变量库函数入口出口从结构设计的观点,一个C++程序由下面几个部分组成:主函数、用户定义函数、库函数、全局说明。例外还包括预处理命令和注释。§2.4C++程序的基本框架二、OOP框架按照面向对象程序设计的思想,其主体是若干类定义的集合。理想的C++程序应由以下几部分组成:类的定义主函数注释预处理命令包括类的说明及类成员函数的类外定义程序的入口分布于程序各处把程序文件划分成若干.h和.cpp文件§2.5运行C++程序从C++源程序到可执行程序的步骤:
编辑、预处理、编译、链接、调试C++源程序C++预处理后的C++源程序目标程序可执行程序运行编辑器预处理器C++编译器链接器程序员调试出错信息§2.6C++的运行环境Microsoft公司的VisualC++6.0Borland公司的BorlandC++5.02等等File:实现与文件有关的所有操作Edit:实现编辑操作View:修改显示状态Insert:用于在工程中增加文件或组件Project:用于控制整个工程Build:用于编译、连接和调试Tools:用于定制和访问VC的工具Window:用于改变窗口大小Help:使用MSDN及其他帮助选择C++源文件输入文件名指定文件位置单击OKabc输入程序之后存盘存盘后,选择compileabc.cpp项,进行编译,给出错误信息。编译无错后,自动进行链接,并生成可执行文件,选则Executeabc.exe。§2.2C++语言的基本符号一、基本符号分类
每种语言都用一组字符来构造有意义的语句。C++程序是用下列字符所组成的字符集写成的:大小写英文字母:a~z,A~Z数字字符:0~9特殊字符:空格!#%^&*_(下划线)
-+=~<>/\|.,:;?’”()[]{}$@§2.2C++语言的基本符号二、基本符号的ASCII编码P31例:charcl=‘a’;
inti=cl;
cout<<cl<<endl<<i;输出结果:a97§2.3C++语言的词汇一、关键字(保留字)关键字是一类有特定的专门含义的单词。
在程序中用到的其他名字(标识符)不能与C/C++的关键字有相同的拼法和大小写。关键字也不能重新定义。注§2.3C++语言的词汇一、关键字(保留字)①C++的关键字一般包含了几乎所有的C
语言的关键字说明②C++的关键字集是在不断变化的③不同版本的C++的关键字集可能不同补充:基本关键字表asmautobreakcasecatchcharclassconstcontinuedefaultdeletedodoubleelseenumexternfloatforfriendgotoifinlineintlongnewoperatorprivateprotectedpublicregisterreturnshortsignedsizeofstaticstructswitchtemplatethisthrowtrytupedefunionunsignedvirtualvoidvolatilewhile§2.3C++语言的词汇二、标识符标识符是由程序员为程序中的各种成份——
变量,有名常量,用户定义的类型,枚举类型的值,函数及其参数,类,对象等所起的名字。说明
标识符必须符合以下规则:§2.3C++语言的词汇标识符必须符合的规则:1.不能是C++关键字,如for,if,case等不可作标识符;2.标识符中字母区分大小写,如Abc与abc被认为是两个不同的标识符。而关键字不区分大小写,如for,FOR,For,foR都认为是同一关键字;3.第一个字符必须是字母或下划线;§2.3C++语言的词汇标识符必须符合的规则:4.不要太长,一般不超过31个字符为宜(太长则书写困难,反为不美);5.不能以数字开头。如C5合法,而5C则为非法;6.中间不能有空格。如map合法,而map则为非法;§2.3C++语言的词汇标识符必须符合的规则:7.变量名不能包含.;,”’+-之类的特殊符号。实际上,标识符中除了能使用26个英文字母的大小写和数字之外,只能使用下划线_。numberOfStudentnumOfStudentDx6y命名的方式决定了程序书写的风格补充:介绍几种常用的命名方式1.骆驼表示法:mycarmy_carmyCar易读,但是下划线书写困难标识符中不能出现空格补充:介绍几种常用的命名方式2.匈牙利标记法:iMycaripMycar表示整型指针变量表示整型变量在每个变量名的前面加上若干表示类型的字符§2.3C++语言的词汇三、字面常量
常量:C++程序中的常量是指固定不变的量。字面常量有名常量例如:圆周率pai=3.1416Int型常量float型常量char型常量字符串常量§2.3C++语言的词汇三、字面常量即整型常量,可用3种形式表示:⑴Int型常量:①十进制整数。如123,-456,0,79834等。
如果某个整数超出了一般整数的表示范围,系统可自动按长整型(longint)来处理。如79834L表示长整型。若此字面整数超出了长整型范围,系统将发出警告。注§2.3C++语言的词汇三、字面常量即整型常量,可用3种形式表示:⑴Int型常量:②八进制整数
以零开头的整数表示八进制整数。如0123,表示(123)8。§2.3C++语言的词汇三、字面常量即整型常量,可用3种形式表示:⑴Int型常量:③十六进制整数
以零和字母x开头或以零和字母X开头的整数表示十六进制整数。如0x123或0X123,表示(123)16。§2.3C++语言的词汇三、字面常量即实型常量,实数在C++中就是浮点数。实数有2种表示:⑵float型常量:①定点数形式:如0.123,.456,0.0等。②指数形式:如123e5,123E5都表示123×105。§2.3C++语言的词汇三、字面常量⑵float型常量:单精度(float)48f或F后缀34.5f
双精度(double)810默认34.5
长双精度
(longdouble)1019l或L后缀34.5e2L种类占用内存有效数字表示形式举例§2.3C++语言的词汇三、字面常量即字符常量,是用单引号括起来的一个字符。如‘a’,‘?’等。⑶char型常量:C++还允许使用一种特殊形式的字符常量,即以“\”开头的字符序列,如‘\n’。注0表示一个整数值‘0’表示一个数字字符,其ASCII码等于48或0x30。§2.3C++语言的词汇三、字面常量即用双引号括起来的字符序列。⑷字符串常量:①字符常量和字符串常量是不同的。说明HELLO‘\0’H§2.3C++语言的词汇三、字面常量即用双引号括起来的字符序列。⑷字符串常量:②不能将字符串常量赋给字符常量。例如:说明charc=“abc”;//error§2.3C++语言的词汇三、字面常量即用双引号括起来的字符序列。⑷字符串常量:说明③单个字符的字符串与字符在输出的表示上没有差别,因为字符串输出时,
C++并不把0结束符一同输出。例如:cout<<“a”<<endl;cout<<‘a’<<endl;输出结果为:aa§2.3C++语言的词汇四、运算符说明①C++语言的运算符和运算形式很丰富,要尤其注意一些包含混和操作的运算符。如++、--、+=、-=等的功能和用法。②C++语言的某些运算符有多种含义。如*的用法。(第三章详述)§2.4C++程序的基本框架一、SP框架main用户定义函数全局变量库函数入口出口
从结构设计的观点,一个C++程序由下面几个部分组成:主函数、用户定义函数、库函数、全局说明。另外还包括预处理命令和注释。§2.4C++程序的基本框架二、OOP框架
按照面向对象程序设计的思想,其主体是若干类定义的集合。理想的C++程序应由以下几部分组成:类的定义主函数注释预处理命令包括类的说明及类成员函数的类外定义程序的入口分布于程序各处把程序文件划分成若干.h和.cpp文件§2.5运行C++程序从C++源程序到可执行程序的步骤:
编辑、预处理、编译、链接、调试C++源程序C++预处理后的C++源程序目标程序可执行程序运行编辑器预处理器C++编译器链接器程序员调试出错信息第三章基本数据类型与基本运算包含简单计算的C++程序基本类型及其派生类型说明语句基本运算符§3.1包含简单计算的C++程序一、程序实例:求和#include<iostream.h>voidmain(){inta,b,sum;//说明三个整型变量
a=43;b=37;//赋值语句
sum=a+b;//“+”、“=”是C++的算术运算符
cout<<“Thesumis”<<sum;cout<<endl;}P55§3.1包含简单计算的C++程序二、程序实例:计算圆面积#include<iostream.h>voidmain(){constfloatpai=3.14;//说明浮点型常量
floatradius;cout<<“Enterradius:”;cin<<radius;floatarea=pai*radius*radius;//说明后即被赋值
cout<<“\nTheareaofcircleis”<<area<<endl;}P56§3.2基本类型及其派生类型一、C++的数据类型C++程序中的数据类型以如下不同类型的形式出现:1.基本类型2.用户定义类型3.导出类型
由系统定义。C++语言在int,float,char,void四种基本类型的基础上又给出了若干类型的派生类型。
是OOP区别于一般SP语言的主要特征之一。C++既可以定义象栈、队列、集合、布尔类型等多种数据类型,又可以结合具体问题定义象学生、汽车等类型。
由已定义类型的某种确定的方式产生的新类型,主要指数组、指针和引用类型。§3.2基本类型及其派生类型二、C++的基本类型2.float型3.char型4.void型float型数据占4个字节空间,取值范围为-3.4E(+/-)38~3.4E(+/-)38,可应用于部分运算。char型数据占1个字节空间,值集为全部基本字符,ASCII码集或扩充ASCII码集对应的全部符号。char型可看作是字符的整型,因此可参与的运算相当多。无值型。1.int型int型数据占2个字节空间,取值范围为-32768~32767,可参与几乎所有的运算。§3.2基本类型及其派生类型2.float型3.char型4.void型说明1.int型①void指没有数值的数据类型。没有任何返回值的函数应被说明为void类型。如:
voidfn();
在函数体内,可以使用return语句,但return
之后不能有任何表达式
(C++对此检查非常严格)②void也会出现在函数体说明中。如:
intg(void);
此语句说明g()是一个不需要任何入口参数的函数,并且返回一个int类型的值。C++中,也可以写成:intg();③不能把数据说明成void型,因为变量说明成没有任何值是没有意义的。④void型可以说明指针,
void指针在C++中是一种普通指针类型(传统的C
中被当成字符指针),如
void*ptr;
指针ptr可以被赋给指向任何类型的指针。§3.2基本类型及其派生类型三、基本类型的派生类型
基本类型经过简单的字长及范围放大或缩小,就形成了基本类型的简单派生类型。派生类型的说明符由int、float、char前面加上类型修饰符组成。类型修饰符包括:shortlongsignedunsingeddoubleP61§3.2基本类型及其派生类型四、enum类型enum类型又称枚举类型,它是一种由用户参与定义的类型。其格式为:enum<enum类型名>{<枚举值表>}<枚举变量表>;enumcolor{red,blue,green,white};例§3.2基本类型及其派生类型四、enum类型⒈一个enum类型实际上是int型的一个子集,其每一个值代表一个整数。说明⒉几个枚举值全未赋值时,它们自左至右分别与整数0、1、…n-1相对应。§3.2基本类型及其派生类型四、enum类型⒊若第i个枚举值赋常量值为整数m,则未赋值的后续枚举值分别与整数m+1、
m+2对应,直到下一个赋了值的枚举值或结束。说明enumcolor{red=100,blue=200,green,white=400};§3.2基本类型及其派生类型四、enum类型⒋枚举类型的说明也可作为成组说明若干整形符号常量的方法。说明⒌C++的enum类型只有一个赋值操作,不能进行任何算术运算,也不能通过强制类型转换而直接给enum类型赋整数值。§3.2基本类型及其派生类型四、enum类型⒍定义了枚举类型之后,枚举变量的取值只能取枚举类型定义时规定的值。说明colorpaint=green;colorpaint=200;//error§3.3说明语句一、语句2.表达式语句3.控制语句4.复合语句和空语句1.说明语句§3.3说明语句一、语句2.表达式语句3.控制语句4.复合语句和空语句1.说明语句对程序中所用到的名字标识符在使用前加以定义和说明,有的还同时给与初始化。§3.3说明语句一、语句2.表达式语句3.控制语句4.复合语句和空语句1.说明语句程序中要求计算机对数据进行处理和操作的语句。§3.3说明语句一、语句2.表达式语句3.控制语句4.复合语句和空语句1.说明语句程序中用来控制语句执行次序的语句。§3.3说明语句一、语句2.表达式语句3.控制语句4.复合语句和空语句1.说明语句
复合语句是用“{”和“}”括起来的若干语句,又称为“块”或“块语句”。空语句是一个特殊的表达式语句,不做任何事情。§3.3说明语句二、常量和变量常量(constant):在程序执行过程中其值不能改变的数据称为常量。变量(variable):在程序执行过程中其值可以改变的数据称为变量。§3.3说明语句三、常量说明const<类型名><常量名>=<表达式>;例如:constintN=2000;constfloatpai=3.14159;§3.3说明语句三、常量说明例如:constfloatpai;pai=3.14159;//error说明⒈定义成const后的常量,程序中对其只能读不能修改,由于不可修改,所以常量定义时必须初始化。§3.3说明语句三、常量说明例如:
constintnumber=max(8,3);//error
说明⒉常量名不能放在赋值语句的左边。补充:关于#define
在编译预处理命令中使用宏替换定义符号常量的方法与用const方式定义的方法有所不同:
#definepai3.14159;
宏替换是在编译时把程序中出现的所有标识符pai都用3.14159来替换,仅仅是两个字符串的代换,并不是一个具有一定类型的常量名,随后的编译无法发现由它引起的数据类型误用的错误。§3.3说明语句四、变量说明[<存储类>]<类型名或类型定义><变量名表>;例如:
intsize,high,temp=37;staticlongsum;autofloatt=0.5;§3.3说明语句四、变量说明说明①在同一语句里不能混合定义不同类型的变量。②存储类:自动变量auto寄存器变量register静态变量static外部变量extern缺省,按自动变量处理[<存储类>]<类型名或类型定义><变量名表>;§3.3说明语句四、变量说明说明③类型名和类型定义不可缺省,用以指定数据类型。④变量名表:列出该说明语句所定义的同一类型的变量及其初值。其格式为:<变量名>[=<表达式>],<变量名表>[<存储类>]<类型名或类型定义><变量名表>;§3.3说明语句四、变量说明1.全局变量和局部变量全局变量:其说明语句不在任何一个类定义、函数定义和复合语句之内的变量。即包含在某一对“{”和“}”之外的变量。占用内存的数据区,在程序运行过程中位置不变。§3.3说明语句四、变量说明1.全局变量和局部变量局部变量:其说明语句在某一类定义、函数定义和复合语句之内的变量。即包含在某一对“{”和“}”之内,所占空间为程序运行时设置的临时工作区,以堆栈的形式允许反复占用和释放。§3.3说明语句四、变量说明2.生存期与作用域生存期:变量a的生存期是指从a被说明且分配了内存开始,直到该说明语句失去效力,相应内存被释放为止,称为该变量的生存期。全局变量的生存期局部变量的生存期§3.3说明语句四、变量说明2.生存期与作用域作用域:变量a的作用域是指a可以代表该变量的范围。#include<iostream.h>voidfn(inty)//y作用域开始{intx=1;//x作用域开始
if(x>y)cout<<x<<endl;elsecout<<y<<endl;}//x和y作用域结束例1描述作用域的概念#include<iostream.h>intid=3;voidmain(){id=5;{intid=7;cout<<“id=”<<id<<endl;//输出7}cout<<“id=”<<id<<endl;//输出5}例2不同作用域的同名变量#include<iostream.h>intn;voidfn(){cout<<“m=”<<m<<endl;//errorcout<<“n=”<<n<<endl;//ok}voidmain(){doublem=3.8;cout<<“n=”<<n<<endl;//okfn();}例3全局变量和局部变量§3.3说明语句四、变量说明3.变量的存储类型⑴auto变量⑵register变量⑶static变量该变量在程序的临时工作区中获得存储空间,为默认值。当寄存器够用时,可以以寄存器作为存储空间。⑷extern变量§3.3说明语句四、变量说明3.变量的存储类型⑴auto变量⑵register变量⑶static变量静态变量和全局变量一样,在内存数据区分配空间,在整个程序运行中不释放。说明②静态变量如未赋初值,系统将自动为其赋默认初值0(NULL)。③静态变量的说明语句在程序执行过程中多次运行或多次被同样说明时,其第一次称为定义性说明,进行内存分配和赋初值操作,在以后的重复说明时仅维持原状,不再做赋初值的操作。⑷extern变量//example1.cpp#include<iostream.h>intn;voidfn();voidmain(){n=20;cout<<n<<endl;fn();}//example2.cpp#include<iostream.h>staticintn;//全局静态变量voidfn(){n++;cout<<n<<endl;}运行结果:201§3.3说明语句全局静态变量使该变量成为定义该变量的源文件所独享。§3.3说明语句四、变量说明3.变量的存储类型⑴auto变量⑵register变量⑶static变量⑷extern变量①一般用于由多个文件组成的程序中,避免重复分配内存。带extern的变量是变量声明,不是变量定义。说明②如果共同变量一次都没有定义,或者在各个文件中分别定义,造成定义多次,或者声明的类型不一致,都会造成直接或间接的错误。例如://file1.cppinta=5;intb=6;externintc;//file2.cppinta;//error:多次定义externdoubleb;//error:类型不一致externintc;//error:无定义§3.3说明语句
两个源文件都以常规方式定义变量a,没有一个声明extern,若在VC环境下,会在链接时,给出一个错误信息:intaalreadydefinedinfile1.obj
两个源文件的b类型不一致,VC在链接时报告一个错误信息:linkerror:unresolvedexternal
两个源文件都声明了变量c为extern,这时编译不会出错,链接时却会找不到该变量,产生一个链接错误,因为没有一个文件为该变量分配空间例1//file1.cpp#include<iostream.h>voidfn1();voidfn2();intn;voidmain(){n=3;fn1();cout<<n<<endl;}voidfn1(){fn2();}//file2.cppexternintn;//n由另一个源
//文件定义voidfn2(){n=8;//使用n}运行结果:8§3.3说明语句例2§3.3说明语句五、类型说明
作用:由用户为一个已定义的类型赋予一个新的类型名。typedeftypedef<已定义类型名><新类型名>;typedefintid_number;typedeffloattemprature;例测试题
面向对象程序设计将数据与___放在一起,做为一个相互依存、不可分割的整体来处理。A对数据的操作B信息C数据隐藏D数据抽象A2面向对象程序设计优于传统的结构化程序设计,其优越性主要表现在,它有希望解决软件工程的两个主要问题:软件复杂性控制和___。A精化已有的代码B编写可重用代码C共享代码D软件生产率的提高D3C++对C语言作了很多改进,下列描述中___使得C语言发生了质变,即从面向过程变成了面向对象。A增加了一些新的运算符B允许函数重载,并允许设置默认参数C规定了函数说明必须用原型D引进了类和对象的概念D4在C语言中合法的字符型常量是___。A“A”B‘t’C65DAB字符常量是用单引号括起来的一个字符。§3.4基本运算符一、运算符和表达式的概念单目运算:<单目运算符><运算分量>或<运算分量><单目运算符>例如:-24,-a,i++双目运算:三目运算:多目运算:双目运算:单目运算:<左运算分量><双目运算符><右运算分量>三目运算:双目运算:条件运算符单目运算:多目运算:单目运算:三目运算:函数调用§3.4基本运算符二、赋值运算1.赋值运算是一种双目运算,其形式为:〈变量名〉=〈表达式〉赋值运算的操作是:①计算表达式的值
②把该值赋给左端的变量例如:a=b+c*a§3.4基本运算符2.赋值缩写,即复合赋值运算
当一变量既出现在表达式的左边,又出现在表达式的右边时,可以缩写。x=x*y;x*=y;x=x+y;x+=y;二、赋值运算§3.4基本运算符三、算术运算1.增量和减量例如:i++;//等价于i=i+1;++i;//等价于i=i+1;a=i++;//等价于{a=i;i=i+1;}a=++i;//等价于{i=i+1;a=i;}增量前缀增量后缀增量减量前缀减量后缀减量++〈运算分量〉〈运算分量〉++--〈运算分量〉〈运算分量〉--§3.4基本运算符1.增量和减量inta=3;intb=++a;//相当于a=a+1;
b=a;
cout<<a<<“”<<b<<endl;intc=a++;//相当于c=a;a=a+1;
cout<<a<<“”<<c<<endl;例1输出结果:4454三、算术运算§3.4基本运算符1.增量和减量例2输出结果:2212in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年云南省建水县高三质量监测(三)物理试题试卷含解析
- 周口职业技术学院《生物工程设备与设计》2023-2024学年第二学期期末试卷
- 上海欧华职业技术学院《幼儿园一日活动设计与组织》2023-2024学年第二学期期末试卷
- 临夏现代职业学院《小学教育科学研究方法》2023-2024学年第二学期期末试卷
- 山东省东营市2024-2025学年六年级数学小升初摸底考试含解析
- 公车加油卡管理使用制度
- 汕尾排水带施工方案
- 内蒙古赤峰市名校2024-2025学年高一上学期期末联考英语试题(含听力)
- 安徽省智学大联考2024-2025学年高二上学期1月期末英语试题【含答案】
- 沈阳彩色混凝土施工方案
- 2025年全国高考体育单招政治时事填空练习50题(含答案)
- 2024年医疗器械经营质量管理规范培训课件
- 中华人民共和国学前教育法-知识培训
- 2024年计算机二级WPS考试题库380题(含答案)
- 基于智能巡检机器人与PLC系统联动控制设计和实现电子信息工程专业
- 毕业设计(论文)VFP小说租阅管理系统
- 河南省内影响工程选址的主要活动断裂资料汇编(最终版)
- (完整版)幼儿园教师优质课评分表
- 河北省工伤职工停工留薪期分类目录 (工伤)
- 人民调解档案规范文本.doc调解文书的格式及使用说明
- 外观检验标准(电镀件)
评论
0/150
提交评论