课程名称:《C++程序设计》主讲教师:冯玉芬E_mail:407877865@qq.com•使用教材:《C++语言程序设计》(第3版)吕凤翥主编著电子工业出版社•参考书:(1)吕凤翥著,C++语言基础教程(第2版),清华大学出版社(2)钱能著《C++程序设计教程》清华大学出版社(3)StanleyB.Lippman等著《C++Primer》2006年(4)谭浩强著,C++程序设计,清华大学出版社(5)王超著,C++程序设计,地质出版社,2006年教材与参考书本课程主要内容:第1章C++语言概述第2章变量和常量第3章运算符和表达式第4章语句和预处理第5章函数和存储类第6章指针和引用第7章结构体和联合第8章类和简单对象第9章复杂对象第10章继承性和派生类第11章多态性和虚函数第12章C++语言的I/O流类库教学目标:1.认识计算机程序概念和了解程序设计思想。2.理解和掌握C++语言的基本词法规则和语句,(变量、常量、数据类型类型、运算符、表达式、基本语句及语句的控制结构、函数的定义,函数的调用、变量的作用域、指针、结构体和联合体、类和对象的定义、类的继承性和派生、类的多态性)3.具备使用C++语言解决简单问题的能力,逐步提高学生的编程能力和调试程序的能力,为后面课程的学习打好基础。第1章C++语言概述怎样学好C++程序设计语言台湾知名技术专家蔡学镛先生写了一本《编程ING》,宣称“人人都能学会程序设计”循序渐进,由浅入深,步步为营,兴趣导向。第1章C++语言概述2.怎样学好C++程序设计语言•学习方法:1)学习每章内容时,注意对基本概念的理解,掌握每章的主要内容。注意了解、理解和掌握三个层次的要求;2)每堂结束布置的习题一定要独立完成。这是进一步掌握所学内容的一个重要途径;3)上机环境是VC6.0,要求进一步掌握对C++语言程序的调试方法。要提高写程序的能力只能通过多读一些程序,多写和调试一些程序,多练习,从简单的做起,第1章C++语言概述1.1面向对象语言简介(了解)1.2C语言与C++语言的关系(了解)1.3C++语言的词法和词法规则(掌握)1.4C++程序结构上的特点(掌握)1.5C++程序的实现(掌握)第1章C++语言概述1.1面向对象语言简介C++是一种面向对象的程序设计语言,它是在C语言基础上发展起来的,虽然它不是最早的面向对象的程序设计语言,但是它是目前使用较为广泛的面向对象的程序设计语言。1.计算机的组成:2.软件系统:是由硬件系统和软件系统两大部分组成的软件=程序+文档3.什么是程序?软件是程序以及开发、使用和维护所需要的所有文档的总称,而程序是软件的一部分。程序设计就是把一堆指令放在一块实现某种功能程序设计=数据结构+算法4.什么是程序设计语言?指令是用计算机程序设计语言编写的计算机可以识别的命令。计算机只能识别一种语言,就是机器语言,是由0和1组成的指令第1章C++语言概述1.1面向对象语言简介机器语言汇编语言高级语言•机器语言•由是用二进制代码表示的计算机能直接识别和执行的机器指令的集合。它是计算机设计者通过计算机硬件结构赋予计算机的功能。计算机发展的初期,软件工程师们只能用机器语言来编写程序。这一阶段,在人类的自然语言和计算机编程语言之间存在着巨大的鸿沟。如101111001111优点:直接执行,速度快缺点:难读、难编、难记,易出错和移植性差第1章C++语言概述1.1面向对象语言简介•汇编语言•为了克服机器语言难读、难编、难记和易出错的缺点,人们就用于代码指令含义相近的英文缩写词、字母或数字字符等符号来取代指令代码,于是就产生了汇编语言。•汇编语言将机器指令映射为一些可以被人读懂的助记符,如ADD、SUB等。此时编程语言与人类自然语言间的鸿沟略有缩小,但仍与人类的思维相差甚远,是面向机器的计算机语言。因为它的抽象层次太低,程序员需要考虑大量的机器细节。•如:ADDCXDX将DX的内容加进CX需要汇编,不能直接执行,由汇编程序,翻译成目标程序。优点:目标程序占用内存空间少,执行速度快,有着高级语言不可替代的用途缺点:使用起来比较繁琐,通用性差,是低级语言第1章C++语言概述1.1面向对象语言简介高级语言:不论是机器语言还是汇编语言都是面向硬件的具体操作,语言对机器过分依赖,要求使用者必须对硬件结构及其工作原理十分熟悉,这对非计算机专业人员是难以做到的,不利于计算机的推广应用,随着计算机技术的发展,促使人们去寻求一些与人类自然语言相近且能为计算机所接受的语意确定、规则明确、自然直观和通用易学的计算机语言。那么这种与自然语言接近,并为计算机所接受和执行的计算机语言就称为高级语言。高级语言屏蔽了机器的细节,是面向用户的计算机语言第1章C++语言概述1.1面向对象语言简介Fortran和Algol语言美国IBM公司约翰·贝克斯(JohnBackus)针对汇编语言的缺点着手研究开发FORTRAN语言FORTRAN语言是世界上第一个被正式推广使用的高级语言。它是1954年被提出来的,1956年开始正式使用,至今已有五十多年的历史,但仍历久不衰,它始终是数值计算领域所使用的主要语言。FORTRAN语言是FormulaTranslation的缩写,意为“公式翻译”。它是为科学、工程问题或企事业管理中的那些能够用数学公式表达的问题而设计的,其数值计算的功能较强。1977JohnBackus因对可用的高级编程系统设计有深远和重大的影响而获图灵奖ALGOL语言(ALGOrithmicLanguage)的缩写艾伦·佩利(AlanJ.Perlis)在巴黎举行的有全世界一流软件专家参加的讨论会上,发表了算法语言Algol60报告1966A.J.Perlis因在新一代编程技术和编译架构方面的贡献而获图灵奖第一代高级语言对数学表达式有很强的运算处理能力JohnBackusAlanJ.Perlis第1章C++语言概述1.1面向对象语言简介Pascal是最早出现的结构化编程语言,具有丰富的数据类型和简洁灵活的操作语句,适于描述数值和非数值的问题。瑞士NiklausWirth教授于六十年代末设计并创立。Pascal也可以是指人名,它的取名原本就是为了纪念十七世纪法国著名哲学家和数学家BlaisePascal,1984NiklausWirth因开发了EULER、ALGOL-W、MODULA和PASCAL一系列崭新的计算语言而获奖C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。C语言是1972年由美国的DennisRitchie设计发明的,在1970年,AT&T贝尔实验室的KenThompson根据BCPL(BasicCombinedProgrammingLanguage)语言设计出较先进的并取名为B的语言。1983KenThompson和DennisM.Ritchie因在通用操作系统理论方面的突出贡献,特别是对UNIX操作系统的推广的贡献而获奖第二代高级语言如何有效地表达算法Pascal和C语言第1章C++语言概述1.1面向对象语言简介第三代高级语言引入抽象数据类型的程序设计语言(不支持继承,是基于对象的程序设计语言)AdaAda是一种表现能力很强的通用程序设计语言,它是美国国防部为克服软件开发危机,耗费巨资,历时近20年研制成功的。Ada语言是美国国防部指定的唯一的一种可用于军用系统开发的语言,我国军方也将Ada做为军内开发标准查尔斯·巴贝奇(CharlesBabbage,1792—1871):巴贝奇计算器第1章C++语言概述1.1面向对象语言简介•阿兰·麦席森·图灵(1912~1954),英国著名数学家、逻辑学家、密码学家,被称为计算机科学之父、人工智能之父。1912年6月23日生于英国帕丁顿,1931年进入剑桥大学国王学院,师从著名数学家哈代,1938年在美国普林斯顿大学取得博士学位,二战爆发后返回剑桥,曾协助军方破解德国的著名密码系统Enigma,帮助盟军取得了二战的胜利。1954年6月7日在曼彻斯特去世。他是计算机逻辑的奠基者,提出了“图灵机”和“图灵测试”等重要概念。人们为纪念其在计算机领域的卓越贡献而专门设立了“图灵奖”。AlanMathisonTuring第1章C++语言概述1.1面向对象语言简介第四代语言面向对象程序设计语言面向对象的语言更接近于自然语言。20世纪60年代开发的simula67,是面向对象语言的鼻祖。C++、Java语言的鸿沟计算机客观世界机器语言汇编语言结构化语言面向对象的语言自然语言对问题的认识(人)语言的鸿沟编程(人)程序的理解和执行(机器)第1章C++语言概述1.1面向对象语言简介一般意义上的对象:对象是人们要进行研究的任何事物,是对问题领域中事物的抽象。对象具有以下特性万物皆对象每个对象都是唯一的对象具有属性和行为静态特征:可以用某种数据来描述动态特征:对象所表现的行为或具有的功能对象具有状态对象都属于某个类,每个对象都是某个类的实例可以是有形的(比如一辆汽车),也可以是无形的(比如一项计划)。——对象第1章C++语言概述1.1面向对象语言简介•分类是人类认识客观事物的一种常用的思维方法•分类所依据的原则——抽象•找出事物的共性,把具有共同性质的事物划分为一类,得出一个抽象的概念。–例如,石头、树木、汽车、房屋等都是人们在长期的生产和生活实践中抽象出的概念。——类面向对象编程中的类与实例的关系类(class)是一种数据类型,是抽象的和不以实例形式存在的实例对象(instance)是类型的实例,是真实存在的对象是类的实例,类是对象的模板一个类可以有多个不同的实例国家{国旗;国土面积;国花;国歌;}中国{五星红旗;960万平方公里;牡丹;义勇军进行曲;}……第1章C++语言概述1.1面向对象语言简介•封装是一个面向对象程序设计语言的基础,它是关于对外部世界隐藏对象内部信息的•把对象的属性和行为(数据和操作)结合成一个独立的封装体。•封装具有隐蔽性,封装体外不可见的成员被隐藏起来,具有安全性。•封装体与外界联系是通过称为接口的通道进行的。——封装如手机等物品,内部的通讯过程很复杂,但是对使用者很易用如定义一个用于处理发送短信的类,对外提供的方法只要求用户传递接受号码和短信内容,内部具体怎么把短信发送出去对于使用者不可见。第1章C++语言概述1.1面向对象语言简介聚合是类之间的一种包含关系。在处理复杂的问题时,常常把复杂的问题进行分解成若干个简单问题,逐个解决简单的问题来实现对复杂问题的解决,具体实现方法是在一个类中可以包含另一个类的对象。一个复杂的类可以是若干个简单类的对象组成。着这种方法称为聚合。飞机机翼机身机尾发动机——聚合第1章C++语言概述1.1面向对象语言简介•定义:特殊类的对象拥有其一般类的全部属性与行为,并且还有自己特殊的属性和行为,称作特殊类对一般类的继承。——继承第1章C++语言概述1.1面向对象语言简介22•生活中,继承的例子随处可见汽车卡车轿车父类更通用、子类更具体有自身装备动力驱动的车辆。汽车的属性—刹车、加速、油耗、速度、载重用于载人及随身物品且座位布置在两车轴之间的汽车载货汽车1/29/2020父类或基类子类或派生类子类或派生类第1章C++语言概述1.1面向对象语言简介23哺乳动物热血、有毛发、用奶哺育幼仔狗有犬牙、食肉、听觉嗅觉敏锐,秉性忠诚,有特定骨骼结构。猫全身披毛,趾底有脂肪质肉垫,行走无声。会捕鼠,会上树,爱吃鱼,白天贪睡。狮子猫为白色长毛,颈、背部毛长达4-5厘米,站姿犹如狮子。波斯猫头部又圆又大,朵细小,耳尖浑圆,眼睛既大且圆,鼻子短、扁、宽阔。下巴饱满,结实浑圆博美犬头短小、耳朵小巧,毛密实,活泼亲人柯利狗尖鼻子、身体颜色红白相间、适合放牧1/29/2020第1章C++语言概述1.1面向对象语言简介24单继承和多继承老虎牙齿锋利,爪子大,身体上有斑纹会爬树,喜欢游泳,集力量速度于一身。狮子雄狮拥有夸张的鬃毛,体型硕大,奔跑迅速狮虎兽头上有狮子所拥有的鬃毛,身体上有老虎身上的斑纹,喜欢游泳第1章C++语言概述1.1面向对