C面向对象编程01_谭浩强.docx





《C面向对象编程01_谭浩强.docx》由会员分享,可在线阅读,更多相关《C面向对象编程01_谭浩强.docx(116页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+面向对象编程Chapter! C+基础知识3.1 Questionl:函数模板:如果两个函数的参数个数相同,函数的行为相同(做同样的事),只是函数类型 和参数的数据类型不同,如果用函数重载的话,编写的函数代码是相同的,为了 节省时间,C+提供了函数模板功能。格式:template typename 标识符 typename 标识符,函数定义(函数的类型和参数的类型用声明的标识符表示)template 是关键字,含义是模板typename是关键字,表示其后的标识符代表类型参数,调用时根据实参的类 型确定形参的类型。所谓函数模板,是建立一个通用函数,不指定函数类型和参数类型,而用个虚 拟的类型
2、表示。在调用函数时,用实参的类型取代模板中的虚拟类型。Example:为计算两个数中的大数定义函数模板:#include using namespace std;template Tmax(Ta,T b,T c) 用虚拟类型T表示类型if(ba) a=b;if(ca) a=c;return a;C+提供了为变量取别名的功能,这就是变量的引用。格式:类型 &变量1=变量2变量2是在此之前已经定义过的变量,且与变量1的类型相同。这里为变量2定义个别名变量丨,在程序里变量丨和变量2就是同一个变量。注意:两个变量不能用同一个别名例:int。= 3 ,b =4;int &c = a; / c 是 c!
3、的别名int&c = b; /Z 错误的用法个变量可以有多个别名例:int a = 3;int & b= a;int & c= b;变量Q有两个别名b和Co#include using namespace std;int main()(int a=10;int &b=a; 声明b是a的引用a=a*a;。的值变化了,b的值也应起变化couta bendl;b=b/5;b的值变化了,。的值也应起变化coutb aendl;return 0;)3.3 Questions:对引用的进步说明:(1)引用变量都具有非void类型(2)不能建立引用的数组(3)可以建立常引用变量,不允许修改常引用变量的值例:
4、int i;const int &a = i;a = 3; /Z 错误的用法i = 8;/ i不是常变,可以修改int i;ini *p = & i;int* &pt = p; pt是p的别名变量,同时/Z也是指针变量C+提供了一种机制,在编译时,将所调用的函数的代码嵌入到调用函数代码 中,在执行函数时省去了调用环节,提高了函数的执行速度。这种机制称为内置 函数,有的书称内联函数.格式:inline函数类型函数名(形参表)( 函数体 inline是C+的关键字,在编译时,编译程序会把这个函数嵌入到调用函数 的函数体中调用格式:函数名(实参表)Example#include using name
5、space std;inline int maxfint ajnt bjnt c)/Z这是一个内置函数,/Z求3个整数中的最大者if (ba) a=b;if (ca) a=c;return a;)int main() int i=7,j=10,k=25,m;m=max(ij,k);coutmax=mendl;return 0;)由于在定义函数时指定它是内置函数,因此编译系统在遇到函数调用max( i.j,k ) 时就用max函数体的代码代替max( i,j,k ),同时用实参代替形参。调用语句 m= max( i,j,k )就被置换成: a=i; b = j; c= k;if ( ba) a=
6、b;if ( ca) a=c;m=a;)使用内置函数可以节省程序的运行时间,但增加了目标程序的长度。所以在使用 时要衡量时间和空间的得失。并不是所有的变量在程序运行的时时刻刻都是可见的。有的变量在整个程序运行 期间都是可见的,称它们为全局变量;有的变量只能在一个函数中可知,被称为 局部变量.每个变量都有其有效的作用域.程序只能在变量的有效的作用域内使用变量, 不能直接使用其他域中的变量木呈白勺iAj彳字i X或程中的内存仝间代码区程序中 名个 函数 的代码全局数据区程序中全局数据和静态数据堆区程序中的动态数据校区程FF中各函数内的数据例1.16局部变量和全局变量同名#include using
7、 namespace std;float a=13.5;int main() int a=5;coutaendl;return 0;程序中有两个变量a,个是全局变量,另个是main函数的局部变量,根据 局部变量会屏蔽同名的全局变量规则,在函数中出现的变量a是局部变量,因 此输出的值是5,而不是13.5,为了在函数中访问全局变量C+提供了作用域运算符::,可以用来指定要访问的作用域,可以把main函数改写成#include using namespace std;float a=13.5;int main()int a=5;coutaendl;cout:aendl;return 0;:a表示全局
8、变量a。注意不能用:访问局部变量。C+提供了字符串类类型string,实际上它不是C+的基本类型,它是在C+ 标准库中声明的个字符串类,程序可以用它定义对象。1 .定义字符串变量格式:string变量名表;可以在定义变量时用字符串常量为变量赋初值:string 变量名=字符串常量注意:如用字符串变量,在程序开始要用包含语句把C+标准库的string头文 件包含进来。字符串操作对字符串变量赋值字符串变量=字符串表达式例:string stl ,st2;cfl =王占占 t2 = stl;访问字符串中的字符C+允许把字符串作为字符数组,第一个字符的下标是0.第二个字符的下 标是1,以此类推。例:s
9、tring w = * then;w=七;结果字符串W变成than 输入输出字符串 格式:cin 字符串变量 cout字符串变量 字符串连接运算 格式:字符串1 +字符串2 功能:把连接运算符两端的字符连接成一个字符串。表达式中可以用字符 串常量也可以用字符串变量。 例:string stl= C+;, string st2= Language; stl = stl + st2 ;,结果是 C+Language 字符串的比较运算 可以用关系运算符、=、=、!=、=对两个字符串同一位置的字符进行比较,根据ASCII码值判定字符的大小。 例:china Chinese 运算结果是假。动态分配撤销内
10、存的运算符new和delete分配内存运算new 类型(初值)类型是决定分配空间尺寸的关键元素,如果运算结果正确,它的值是分配内存空间的起始地址,否则返回NULL。,例:int *a =new int;int *b =new int( 100);char*ch = new char10;int * q = new int 5 4;float * p = new float(3.14159);归还动态内存运算, delete 指针变量 代表数组,如果不是数组可以省略口。 运算功能:撤销指针变量所指的动态内存空间,指针变量的数据类型决定 了空间尺寸的大小。 例:char *p=new char10
11、;delete p; 例118用动态内存存放结构体变量#include #include using namespace std;struct student char name 10;int num;char sex;);student *p;p=new student;strcpy(p-name,Wang Fun);p-num=10123;p-sex=M;coutp-name p-num p-sexendl;delete p;return 0;)先声明了一个结构体类型student,定义个指向它的指针变量p,用new开 辟个空间存放个student类型变量。如果无法正常分配内存,运算会返回
12、一个空指针NULL,程序可以设计判断结构,根据判断结果决定怎样操作。注意不要混合使用new、delete; mctlloc、free。要正确搭配,不要用new分配内存后,又用free释放内存。Chapter2类和对象2.1 面向对象程序设计方法概述对于规模比较小的程序,程序员可以直接编写出个面向过程的程序,能详细地 描述每一瞬间的数据结构和对其操作的过程。但是当程序规模越来越大,面向过 程的程序语言就显得力不从心,面向对象程序设计语言就应运而生,C+就是 其中的一个成员。2.1.1 什么是面向对象的程序设计面向对象的程序设计的思路与人们日常生活中处理问题的思路是相似的。个复 杂的事物总是由许多
13、部分组成的。例如,一辆汽车是由发动机、底盘、车身和车 轮等部件组成。当人们生产汽车时,不是先设计和制造发动机,再设计和制造底盘,然后设 计和制造车身和车轮,而是分别设计和制造发动机、底盘、车身和车轮,最后把 它们组装起来。这就是面向对象的基本思路。客观世界中任何个事物都可以看成一个对象。对象可以是自然物体,也可以是 社会中的一种组织结构(班级、系、学校)甚至个图形、项计划等都可以看 成对象。复杂的对象由简单的对象组成,例如火车站对象包含售票处、行李房、 候车室和站台、信号灯、铁轨和通信设施等对象。对象是构成系统的基本单位。 任何个对象都具有静态和动态的特征,班级这个对象具有从属个系和专业、学生
14、人数、组建时间等静态特征,它还具 有出操、学习、参加运动会等动态特征。静态特征称为属性,动态特征称为行为, 外界给对象发出的信息一般称作消息个对象往往包含组属性和一组行为。如电视机包括生产厂家、品牌、屏幕尺 寸等是静态特征,开机、关机、选择频道、调节音量、调节彩色等是动态特征。 面向对象的程序设计在设计个系统时,首先要确定系统中包括哪些对象,要分 别设计这些对象。在C+中,每个对象由数据和函数(操作代码)两部分组成。 数据代表了属性,函数是对数据操作的代码,代表了行为。例如三条边长是三角 形的属性,利用三条边长计算三角形面积、输出计算结果,实现这些操作的代码 就是对象的行为,在程序设计中又称方
15、法。调用对象中的函数就是向对象传递 个消息,要求对象执行某个操作。封装与信息隐蔽对个对象进行封装处理,把它的一部分属性和功能向外界屏蔽,从外面看不到 这些属性和功能。例如录像机里有电路板和机械控制部件,由于有机壳的保护, 在外面只看到个黑箱子,在它的表面有若干个按键。人们只需知道这些按键的 功能即可操作录像机。而不必知道录象机的工作原理和系统结构。在设计个对象时,要周密地考虑如何进行封装,把不必让外界知道的部分隐蔽 起来。也就是说,把对象的内部实现和外部行为分隔开来。封装性是面向对象程序设计的一个重要特点,封装在此有两个含义:把有关的数据和操作代码封装在一个对象中,形成程序中的一个基本单位,各
16、 个对象之间相互独立,互不干扰。把对象中的某些部分对外隐蔽,只留下与外界联系的接口接收外界的消息,这 种对外界隐蔽的做法称为信息屏蔽。封装把对象内部实现与外部分隔开,外界不 了解对象内部的具体细节,其实外界也不需要了解。外界需要真正了解的是对象 的对外接口。C+对象中的公有函数就是对象的对外接口。外界通过调用公有 函数,访问对象中的数据成员,完成指定的操作。抽象抽象是表示同一类事物本质的方法,它关注事物本质特征,对象是具体的,例如 某学院2006级计算机软件专业的个学生是个对象,可以将一组同类对象的 共同特征抽象出来,从而形成类的概念。可以将前面所提的某学院2006级计算 机软件专业的所有学生
17、可抽象出2006级计算机软件专业学生类。类是对象的抽 象,而对象是类的具体实例。继承与重用如果已经建立名为A的类,现要建立一个名为B的类,而B类与A类的内容 基本相同,只是在A类基础上增加了一些属性和行为,这样只需在A类的基 础上添加新内容即可,这就是面向对象程序设计中的继承机制。C+也具有继承机制,利用这个机制可以在一个已有的类的基础上建立一个新类, 这也是软件重用思想,不仅可以利用自己过去建立的类,而且还可以利用其他人 放在类库中的类建立类,这就大大缩短了软件开发周期。多态性 多个相似而不完全相同的对象,收到外界给的同一个消息时,它们各自执行不同的操作,这种现象叫多态现象。 例如在wind
18、ows中,用鼠标双击个文件对象时,如果它是可执行文件则 会执行文件中的程序,如果它是个文本文件则会启动个编辑器来打开这 个文件,这就是面向对象程序设计中的多态性一个实际例子。 在C+中所谓多态性是指:由继承而产生的新类,它的对象对同一个消息会 作出不同的响应。面向对象程序设计的特点传统的面向过程程序设计是围绕功能进行的,用个函数实现一个功能,个函 数可以使用任何组数据,组数据可以被多个函数使用。当程序规模越来越大, 数据越来越多,操作越来越复杂,这种方法容易出现错误,程序员往往感到难以 应付。面向对象程序设计采用的是另外一种思路。它面对的是一个个对象。实际上每组 数据都有特定的用途,它是某种操
19、作的对象。也就是说,组操作调用组数据。例如三角形的三条边长q、b、c它们只与计算该三角形的面积、三角形的周长 等操作有关,与其他操作无关。我们把这三个数据和计算三角形面积、周长等操 作的代码放在起,封装成一个对象,与外界相对分隔。这也符合客观世界的本 来面目。面向对象程序设计包括两个方面:设计所需的各种类,即决定把哪些数据和操作封装在一起。考虑怎样向对象发送消息(调用对象的成员函数),实现所需的操作。这时设 计程序象一个总调度,不断地向各个对象发送消息(命令),让这些对象活动起 来(激活这些对象),完成各自的职责范围工作,各个对象的操作完成,整体任 务也就完成了。2.1.2类和对象作用 类是C
20、+中十分重要的概念,它是实现面向对象程序设计的基础。C+ 对C改进,其中最重要的就是增加了类这样种类型。类是所有面向对 象的语言的共同特征,所有面向对象的语言都提供了这种类型。个有一 定规模的C+程序是由许多类构成的。可以说类是C+的灵魂。 C+支持面向过程的程序设计,也支持基于对象和面向对象的程序设计。 从本章到第四章介绍基于对象的程序设计。包括类和对象的概念、类的机 制和声明、对象的定义与使用等。这是面向对象程序设计的基础。在面向过程的结构化程序设计中,人们用下面的公式描述程序:程序=数据结构+算法算法和数据结构两者是相互独立的,是分开设计的。面向过程的程序设计是以数 据结构为基础的算法设
21、计.在实践中人们逐渐认识到算法和数据结构是互相紧密 联系不可分的。应当以个算法对应组数据结构,而不宜提倡一个算法对应多 组数据结构,以及以组数据结构对应多个算法。基于对象和面向对象程序设计就是把个算法和一组数据结构封装在个对象中,形成了新的观念:面向对象的软件开发 对象=数据结构+算法 程序=(对象+对象+对象)+消息 消息的作用就是对对象进行控制。程序设计的关键是设计好每个对象, 以及确定向这些对象发出的命令,让各个对象完成相应的任务。Class 类名 private:私有成员声明public:公有成员声明protected:保护成员声明2.2 类的声明和对象的定义class是保留字,声明类
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 编程 01 谭浩强

限制150内