第1章C++基础1.ppt
《第1章C++基础1.ppt》由会员分享,可在线阅读,更多相关《第1章C++基础1.ppt(57页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一章第一章C+基础基础1.1C+概述概述1.2类和对象类和对象1.3继承和派生继承和派生1.4多态和虚函数多态和虚函数 1.1.1 C+程序创建 使用C+高级语言编写的程序称为源程序源程序。由于计算机执行由0和1组成的二进制指令(称为机器代码)机器代码),因而C+源程序是不能被计算机直接执行的,必须转换成机器代码才能被计算机执行。这个转换过程就是编译器对源代码进行编译编译和连连接接的过程。如图1.1所示。源代码编译器目标代码连接程序可执行代码库其他代码图图1.1 C+程序创建过程程序创建过程1.1C+概述概述1.1C+概述概述 Visual C+是Microsoft公司推出的目前使用极为广泛
2、的基于Windows平台的可视化编程环境。Visual C+6.0是在以往版本不断更新的基础上形成的,由于其功能强大、灵活性好、完全可扩展以及具有强有力的Internet支持,在各种以C/C+语言为内核的Windows开发工具中脱颖而出,成为目前流行的Windows应用程序开发的集成开发环境,如图1.2所示。图图1.2 Visual C+6.05 SP6开发环境开发环境1.1C+概述概述 1.创建工作文件夹创建工作文件夹创建Visual C+6.0的工作文件夹“D:Visual C+应用”,以后所有创建的C+程序都在此文件夹下,这样既便于管理,又容易查找。在文件夹“D:Visual C+应用”
3、下再创建一个子文件夹“第1章”用于存放第1章中的C+程序;对于第2章程序就存放在子文件夹“第2章”中,依此类推。2.启动启动Visual C+6.0图图1.3 “每日提示每日提示”对话框对话框选择“开始”“程序”“Microsoft Visual Studio 6.0”“Microsoft Visual C+6.0”,运行Visual C+6.0。第一次运行时,将显示如图1.3的“每日提示”对话框。单击下一条按钮,可看到有关各种操作的提示。如果在启动时显示提示复选框中单击鼠标,去除复选框的选中标记“”,那么下一次运行Visual C+6.0,将不再出现此对话框。单击关闭按钮关闭此对话框,进入V
4、isual C+6.0开发环境。图图1.3 “每日提示每日提示”对话框对话框1.1C+概述概述 3.添加添加C+程序程序 (1)单击标准工具栏 上的“新建”()按钮,打开一个新的文档窗口,在这个窗口中输入下列C+代码。例例Ex_Simple 一个简单的一个简单的C+程序程序/*第一个简单的C+程序*/#include int main()double r,area;/定义变量coutr;/从键盘上输入变量r的值area=3.14159*r*r;/计算面积cout圆的面积为:arean;/输出面积return 0;/指定返回值 1.1C+概述概述 (2)选择“文件”“保存”菜单或按快捷键Ctrl
5、+S或单击标准工具栏的“”按钮,弹出“保存为”文件对话框。将文件定位到“D:Visual C+应用第1章”文件夹中,文件名指定为“Ex_Simple.cpp”(注意扩展名.cpp不能省略,cpp是C Plus Plus的缩写,即“C+”的意思)。4.编译和运行编译和运行 (1)单击编译工具条 上的生成工具按钮“”或直接按快捷键F7,系统弹出一个对话框,询问是否为该程序创建默认的活动工作区间文件夹,单击是按钮,系统开始对Ex_Simple进行编译、连接,同时在输出窗口中显示编连的有关信息,当出现:表示Ex_Simple.exe可执行文件已经正确无误地生成了。(2)单击编译工具条 上的运行工具按钮
6、“”或直接按快捷键Ctrl+F5,就可以运行刚刚生成的Ex_Simple.exe了,结果弹出这样的控制台窗口(其属性已被修改过):1.1C+概述概述此时等待用户输入一个数。当输入10并按Enter键后,控制台窗口显示为:其中,“Press any key to continue”是Visual C+自动加上去的,表示Ex_Simple运行后,按一个任意键将返回到Visual C+开发环境,这就是C+程序的创建、编连和运行过程。上述生成的程序又可叫“控制台应用程序”,它是指那些需要与传统DOS操作系统保持程序的某种兼容,同时又不需要为用户提供完善界面的程序。简单地讲,就是指在Windows环境下
7、运行的DOS程序。控制台窗口就是一个DOS屏幕!1.1C+概述概述1.1.2 C+程序结构 每一个C+程序源文件通常是以.cpp(c plus plus,C+)为扩展名,它是由编译预处理指令、数据或数据结构定义以及若干个函数组成。下面就以Ex_Simple.cpp的程序代码(如图1.4所示)来分析C+程序的组成和结构:1.main函数函数代码中,main表示主函数主函数,由于每一个程序执行时都必须从main开始,而不管该函数在整个程序中的具体位置,因此每一个C+程序或由多个源文件组成的C+项目都必须包含一个且只有一个main函数。图图1.4 Ex_Simple.cpp的程序代码的程序代码1.1
8、C+概述概述 2.头文件包含头文件包含 行号为行号为3的代码是C+文件包含#include的编译指令,称为预处理指令预处理指令。#include后面的iostream.h是C+编译器自带的文件,称为C+库文件库文件,它定义了标准输入/输出流的相关数据及其操作,由于程序用到了输入/输出流对象cin和cout,因而需要用#include将其合并到程序中,又由于它们总是被放置在源程序文件的起始处,所以这些文件被称为头文件头文件(Header File)。C+编译器自带了许多这样的头文件,每个头文件都支持一组特定的“工具”,用于实现基本输入输出、数值计算、字符串处理等方面的操作。3.注释注释 通常,必
9、要的注释内容应包含:在源文件头部进行必要的源程序的总体注释总体注释:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。在函数的头部进行必要的函数注释函数注释:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。其他的少量注释其他的少量注释。如全局变量的功能、取值范围等。千万不要陈述那些一目了然的内容,否则会使注释的效果适得其反。需要说明的是,C+中的“/*.*/”是用来实现多行的注释,它是将由“/*”开头到“*/”结尾之间所有内容均视为注释,称为块注释块注释。块注释(“/*.*/”)的注解方式可以出现在程序中的任
10、何位置,包括在语句或表达式之间。而“/”只能实现单行的注释,它是将“/”开始一直到行尾的内容作为注释,称为行注释行注释。1.1C+概述概述1.1.3 C+程序组成下面再看2个C+程序:例例Ex_Simple1 在屏幕上输出一个由星号形成的三角形在屏幕上输出一个由星号形成的三角形 /输出星号的三角形阵列#include void DoDraw(int num);/声明一个全局函数 int main()int num=5;/定义并初始化变量 DoDraw(num);/函数的调用 return 0;/指定返回值 void DoDraw(int num)/函数的定义 for(int i=0;i num
11、;i+)/循环语句 for(int j=0;j=i;j+)cout*;cout n;1.1C+概述概述 本程序包括两个函数:主函数main和被调用的函数DoDraw。DoDraw函数是在屏幕上输出星号的三角形阵列,这个阵列的行数以及每行星号的个数由num决定。程序运行的结果如下:在以后的C+程序运行结果中,本书不再完整显示其控制台窗口,也不再显示“Press any key to continue”,仅将控制台窗口中运行结果部分裁剪下来列出,并加以单线阴影边框,本书作此约定本书作此约定。1.1C+概述概述 例例Ex_Simple2 用类的概念重写例用类的概念重写例Ex_Draw#include
12、 class CDrawArray /定义一个类public:void DoDraw(int num);/声明类的公有成员函数;void CDrawArray:DoDraw(int num)/成员函数的实现for(int i=0;inum;i+)for(int j=0;j=i;j+)cout*;coutn;int main()int num=5;CDrawArray myDraw;/定义类的一个对象myDraw.DoDraw(num);/调用此对象的成员函数return 0;/指定返回值1.2类和对象类和对象 面向对象的程序设计有三个主要特征:封装封装、继承继承和多态多态。(1)封装封装。封装
13、是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。在在C+中,中,封装是通过类来实现的封装是通过类来实现的。类是用来描述具有相同的属性和方法的对象的集合,它定义了该集合中每个对象所共有的属性和方法。(2)继承继承。继承是让某个类型的对象获得另一个类型的对象的特性。在C+面向对象程序设计中,继承是指一个子类继承父类(或称为基类)的特征。通过继承可以实现代码的重重用用:从已存在的类派生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性。(3)多态多态。对于相同的消息,不同的对象具有不同的反应的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码
14、的复杂度。总之,面向对象的程序设计是将问题抽象成许多类,将数据与对数据的操作封装在一起,各个类之间可以存在着继承关系,对象是类的实例,程序是由对象组成。因此,在C+面向对象程序设计,首先设计类,定义类的属性和可执行的操作(方法),然后设计使用这些类的对象的程序。这种从低级(如类)到高级(如程序)的处理过程称为自下向上自下向上的编程方式。1.2类和对象类和对象1.2.2 类的声明 C+中,声明一个类的一般格式如下:class /声明部分private:public:protected:;/实现部分类类体体1.2类和对象类和对象 成员函数成员函数是用来对数据成员进行操作,又称为方法方法。注意,类体
15、中最后一个花括号后最后一个花括号后面的分号面的分号“;”不能省略不能省略。在Visual C+中,常用大写的C字母开始的标识符作为类名,C用来表示类(Class),以与对象、函数及其他数据类型的名称相区别。当类的成员函数的定义是在类体外部完成时,必须用作用域运算符作用域运算符“:”来告知编译系统该函数所属的类类。此时,成员函数的定义格式如下::()函函数数体体1.2类和对象类和对象 例例Ex_StuScoreClass 一个类的定义一个类的定义示例示例 需要说明的是:(1)类中的数据成员的数据类型可以是任意的,包含整型、浮点型、字符型、数组、指针和引用等,也可以是另一个类的对象。例如:clas
16、s COne ;class CTwo private:COne a;/数据成员a是已定义的COne类对象 ;1.2类和对象类和对象 (2)由于类是一种数据类型,系统并不会为其分配内存空间,所以在定义类中的数据成员时,不能对其进行初始化,也不能指定除static之外的任何存储类型。例如类CStuscore中,下面的定义是错误的:class CStuscore private:floatfScore3=80.0,90.0,78.0;/错误:不能在直接对数据成员进行初始化错误:不能在直接对数据成员进行初始化 auto int n;/错误:不合法的存储类型错误:不合法的存储类型 ;(3)访问权限关键词
17、public、private、protected在类中使用先后次序无关紧要,且可使用多次。每个访问权限关键词为类成员所确定的访问权限是从该关键词开始到下一个关键词为止。如在CStuscore类中,私有数据成员是用两个private来分开写成二个部分。同样,若将公有成员函数用两个public分开写成二个部分,仍是正确的。1.2类和对象类和对象 (4)在进行类设计时,通常将数据成员的声明为私有的,而将大多数成员函数声明成公有的。这样,类以外的代码不能直接访问类的访问权限私有数据,从而实现了数据的封装数据的封装。而公有成员函数可为内部的私有数据成员提供外部接口,但接口实现的细节在类外又是不可见的,这
18、就是C+类的优点之一。(5)一般来说,程序员更多关心的是public成员,因此常将public成员写在类体中的前面,而将private成员写在类体中的后面。若在类体内没有指定成员的访问权限,则默认的访问权限为私有的私有的(private)。(6)当程序比较大时,应尽量将类单独存放在一个文件中或将类的声明放在头文件中而将成员函数的实现放在与头文件同名的.cpp文件中(这也是Visual C+6.0的编程方式)。1.2类和对象类和对象 1.2.3 对象的定义和初始化 类对象有3种定义方式:声明之后定义声明之后定义、声明之时定义声明之时定义和一次性定义一次性定义。例如:class A ;A a;/声
19、明之后定义 class B b,c;/声明之时定义 class d,e;/一次性定义 但由于“类”比任何数据类型都要复杂得多,为了提高程序的可读性,真正将“类”当成一个密闭、“封装”的盒子(接口),在程序中应尽量使用对象的声明之后定义声明之后定义方式,即按下列格式进行:;1.2类和对象类和对象 其中,类名类名是已声明过的类的标识符,对象名可以有一个或多个,多个时要用逗号逗号隔开。被定义的对象既可以是一个普通对象,也可以是一个数组对象或指针对象。例如:CStuscore one,*Stu,Stus2;这时,one是类CStuscore的一个普通对象,Stu和Stus分别是该类的一个指针对象和对象
20、数组。若对象是一个指针,则还可像指针变量那样进行初始化,例如:CStuscore *two=&one;可见,在程序中,对象的使用和变量是一样的,只是对象还有成员的访问等手段。1.2.4 对象成员的访问 一个对象的成员就是该对象的类类所定义的数据成员和成员函数。访问对象的成变量和成员函数与访问一般变量和函数的方法是一样的,只不过须在成员前面加上对象名和成员运算符“.”,其表示方式如下:.()1.2类和对象类和对象 例如:coutone.getName()endl;/调用对象one中的成员函数getName,然后输出其结果 cout Stus0.getNo()endl;/调用对象数组元素Stus0
21、中的成员函数getNo,然后输出 需要说明的是,一个类对象只能访问该类的公有型成员类对象只能访问该类的公有型成员,而对于私有型成员则不能访问,例如getName和getNo等公有成员可以由对象通过上述方式来访问,但strName、strStuNo、fScore等私有成员不能被对象来访问。若对象是一个指针,则对象的成员访问形式如下:-()1.2类和对象类和对象 “-”是另一个表示成员的运算符,它与“.”运算符的区别是:“-”用来表示指向对象的指针的成员,而“.”用来表示一般对象的成员。需要说明的是,下面的两种表示是等价的(对于成员函数也适用):-(*).例如:CStuscore *two=&on
22、e;cout(*two).getName()endl;/A coutgetName()endl;/与A等价 需要说明的是,类外通常是指在子类(后面会讨论)中或其对象等的一些场合,对于访问权限public、private和protected来说,只有在子类中或用对象来访问成员时,它们才会起作用。在用类外对象来访问成员时,只能访问public成员,而对private和protected均不能访问。对类中的成员访问或通过该类对象来访问成员都不受访问权限的限制。1.2类和对象类和对象 1.2.5 构造函数和析构函数(1)构造函数)构造函数 前面已提及,在类的定义中是不能不能对数据成员进行初始化的。为了
23、能给数据成员设置某些初值,这时就要使用类的特殊成员函数构造函数构造函数。构造函数的最大特点是在对象建立时它会被自动执行自动执行,因此用于变量、对象的初始化代码一般放在构造函数中。C+规定,一个类的构造函数必须与相应的类同名,它可以带参数,也可以不带参一个类的构造函数必须与相应的类同名,它可以带参数,也可以不带参数,与一般的成员函数定义相同,可以重载,也可以有默认的形参值数,与一般的成员函数定义相同,可以重载,也可以有默认的形参值。例如:程序运行的结果为:分析和说明:(1)代码中,为类CPerson定义了3个重载的构造函数(程序中用A、B、C标明)。这些构造函数的重载重载必须按其规定进行定义:要
24、么参数个数不同;要么参数个数相同,但参数类型不能相同。其中,构造函数CPerson(float h,float w=120),不仅设置了形参w的默认值,而且还将该构造函数的声明在类中进行,其定义在类体外实现。1.2类和对象类和对象 (2)主函数main中,对象one的初始化等价于one.CPerson(DING),因而调用的是B构造函数,此时对象的私有数据成员name设定了初值“DING”,而height和weight初值没有指定,它们的初值取决于对象的存储类型,可能是默认值或无效值。(3)对象two的初始化等价于two.CPerson(170,130),因而调用的是C构造函数,此时对象的私有
25、数据成员height和weight初值分别设定为170、130,而name初值没有指定,它可能是默认值或无效值。(4)对象three的初始化等价于three.CPerson(DING,170,130),因而调用的是A构造函数,此时对象的私有数据成员name、height和weight初值分别设定为DING、170和130。在C+函数声明时,自右向左可以为一个或多个形参指定默认的参数值,这样在调用时,可以不给出具体的实际参数值,而按其指定的默认值工作。如CPerson(float h,float w=120)构造函数,在定义对象时,若有CPerson other(170)。则使得height=1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 基础
限制150内