清华大学经典C++教程-郑莉-1
清华大学郑利c++4类与对象

32
C++语言程序设计
清华大学 郑莉
例4-2 拷贝构造函数举例
构
造 class Point
函 数 和 析
{ public: Point(int xx=0,int yy=0){X=xx; Y=yy;} Point(Point& p); int GetX() {return X;}
构
int GetY() {return Y;}
数 现拷贝赋值。
和 void main(void)
析 构 函
{ Point A(1,2); Point B(A); //拷贝构造函数被调用
数
cout<<B.GetX()<<endl;
}
35
C++语言程序设计
清华大学 郑莉
例4-2拷贝构造函数举例
构 造 函
若函数的形参为类对象,调用函数时,
实参赋值给形参,系统自动调用拷贝 构造函数。例如:
函 private:
数
int X,Y;
};
33
Point::Point (Point& p) {
X=p.X; Y=p.Y; cout<<"拷贝构造函数被调用"<<endl; }
34
C++语言程序设计
清华大学 郑莉
例4-2 拷贝构造函数举例
构
造 当用类的一个对象去初始化该类的另一
函 个对象时系统自动调用拷贝构造函数实
函
int Hour,Minute,Second;
数 };
30
构造函数的实现: Clock::Clock(int NewH, int NewM, int NewS) {
清华郑莉C

式 例如:a>b,c<=a+b,x+y==3
基 逻辑运算与逻辑表达式
本 数 逻辑运算符
据
!(非) &&(与) ||(或)
类
优先次序: 高
→
低
型 逻辑表达式
和
例如:(a>b)&&(x>y)
表 其结果类型为 bool,值只能为 true
符。
基
数据类型
——常量与变量
本
#include <iostream>
数
using namespace std;
据 类 变量先声
明后使用
型
void main(void) {
const int PRICE=30; int num,total; float v ,r,h;
符号常量
和 表
变量
num=10; total=num*PRICE; cout<<total <<endl;
本
数 运算规则
据 –两个操作数进行异或:
类
若对应位相同,则结果该位为 0,
型
若对应位不同,则结果该位为 1,
和 举例:计算 071^052
表
071:
00111001
达
052: (^) 0 0 1 0 1 0 1 0
式
071^052 : 0 0 0 1 0 0 1 1
基 位运算——按位异或(^)
型 字符串常量
和 例:"CHINA" C H I N A \0
表
"a"
C语言程序设计(郑莉)课后习题答案

C++语言程序设计(清华大学郑莉)课后习题答案第一章概述1-1 简述计算机程序设计语言的发展历程。
解:迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,C++语言是一种面向对象的编程语言,也属于高级语言。
1-2 面向对象的编程语言有哪些特点?解:面向对象的编程语言与以往各种编程语言有根本的不同,它设计的出发点就是为了能更直接的描述客观世界中存在的事物以及它们之间的关系。
面向对象的编程语言将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),形成类。
通过类的继承与多态可以很方便地实现代码重用,大大缩短了软件开发周期,并使得软件风格统一。
因此,面向对象的编程语言使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。
C++语言是目前应用最广的面向对象的编程语言。
1-3 什么是结构化程序设计方法?这种方法有哪些优点和缺点?解:结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。
结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。
虽然结构化程序设计方法具有很多的优点,但它仍是一种面向过程的程序设计方法,它把数据和处理数据的过程分离为相互独立的实体。
当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。
由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。
C++_语言程序设计(清华大学郑莉)_(1)

作为一个相互依存、不可分离的整体——对 象。 对同类型对象抽象出其共性,形成类。
类通过一个简单的外部接口,与外界发生
关系。 对象与对象之间通序设计
清华大学 郑莉
面 向 对 象 的 方 法
程序设计方法的发展历程
——面向对象的方法
优点:
程序模块间的关系更为简单,程序模块的独立
形的(比如一项计划)。
是构成世界的一个独立单位,具有
静态特征:可以用某种数据来描述
动态特征:对象所表现的行为或具有的功能
14
C++语言程序设计
清华大学 郑莉
面 向 对 象 的 方 法
面向对象的基本概念
——对象
面向对象方法中的对象:
是系统中用来描述客观事物的一个实体,它
是用来构成系统的一个基本单位。对象由一 组属性和一组行为构成。
32
C++语言程序设计
清华大学 郑莉
信 息 的 表 示 与 存 储
不同进位记数制间的转换
十进制小数转换成R进制小数
“乘 R 取整”法,例如:
——十进制→ R 进制
高位 0.3125 ×2 0.625 ×2 0.25 ×2 0.5 ×2 所以 0.312510 = = 0 .625 = 1 .25 = 0 .5 = 1 .0 0.01012
31
C++语言程序设计
清华大学 郑莉
信 息 的 表 示 与 存 储
不同进位记数制间的转换
“除R取余”法,例如:
2 2
——十进制→ R 进制
十进制整数转换成R进制的整数
68 余 数 34 ┄┄┄┄┄┄┄┄┄┄┄┄ 0 低位 2 17 ┄┄┄┄┄┄┄┄┄┄┄ 0 2 8 ┄┄┄┄┄┄┄┄┄┄┄ 1 2 4 ┄┄┄┄┄┄┄┄┄┄ 0 2 2 ┄┄┄┄┄┄┄┄┄┄ 0 2 1 ┄┄┄┄┄┄┄┄┄ 0 0 ┄┄┄┄┄┄┄┄┄ 1 高位 所以 6810=10001002
C 语言程序设计(清华大学郑莉)课后习题答案

第一章概述1-1简述计算机程序设计语言的发展历程。
解:迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,C++语言是一种面向对象的编程语言,也属于高级语言。
1-2面向对象的编程语言有哪些特点?解:面向对象的编程语言与以往各种编程语言有根本的不同,它设计的出发点就是为了能更直接的描述客观世界中存在的事物以及它们之间的关系。
面向对象的编程语言将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),形成类。
通过类的继承与多态可以很方便地实现代码重用,大大缩短了软件开发周期,并使得软件风格统一。
因此,面向对象的编程语言使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。
C++语言是目前应用最广的面向对象的编程语言。
1-3什么是结构化程序设计方法?这种方法有哪些优点和缺点?解:结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。
结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。
虽然结构化程序设计方法具有很多的优点,但它仍是一种面向过程的程序设计方法,它把数据和处理数据的过程分离为相互独立的实体。
当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。
由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。
1-4什么是对象?什么是面向对象方法?这种方法有哪些特点?解:从一般意义上讲,对象是现实世界中一个实际存在的事物,它可以是有形的,也可以是无形的。
C 程序设计 教学课件 ppt 第1章_程序与数据

士开始对C语言进行改进和扩充,创建了一个新的语 言,最初这个语言被称为“带类的C”,1983年正 式取名为C++
C++程序设计,郑莉,清华大学 12
1.1 程序设计概述
1.1.2 C++语言
• C++的两个“+”号各有含义。第一个“+”号表示 C++语言首先是一个更好的C语言,它根除了C语言 中存在的一些问题;第二个“+”号表示C++在C语 言的基础加入了对面向对象程序设计的支持
C++程序设计,郑莉,清华大学 20
1.2 数据的存储与表示
1.2.1数据的存储
• 二进制数的编码表示
▫ 反码
反码很少使用,但作为一种编码方式和求补码的中 间码。正数的反码与原码表示相同。负数的反码与 原码有如下关系:
负数反码的符号位与原码相同(仍用1表示),其余各 位取反(0变1,1变0)
1.1.2 C++语言
• C++语言完全兼容C语言
▫ 许多C语言程序可以不加修改就可以被C++语言使 用
▫ C++语言不是一个完全纯正的面向对象的语言, 它同时支持面向过程的程序设计和面向对象的程
序设计
• 我们要更好的使用C++,就必须更注重学习其面
清华大学郑利c++4类与对象

};
7
C++语言程序设计
抽象实例——人
清华大学 郑莉
OOP
数据抽象:
的 char *name,char *gender,int age,int id
基 代码抽象:
本 生物属性角度:
特 点
GetCloth(), Eat(), Step(),… 社会属性角度:
Work(), Promote() ,…
和 using namespace std;
class Clock
对{
象
}
......//类的声明略
//......类的实现略
void main(void)
{ Clock myClock;
myClock.SetTime(8,30,30);
myClock.ShowTime();
}
28
C++语言程序设计
清华大学 郑莉
内联成员函数举例(一)
类 class Point
和
{ public:
对
void Init(int initX,int initY) {
象
X=initX;
Y=initY;
}
int GetX() {return X;}
int GetY() {return Y;}
private:
int X,Y;
15
C++语言程序设计
清华大学 郑莉
私有类型成员
类 和 在关键字private后面声明,只允许 对 本类中的函数访问,而类外部的任何函 象 数都不能访问。
如果紧跟在类名称的后面声明私有成员, 则关键字private可以省略。
16
C++语言程序设计(清华大学郑莉)

第四章 类与对象
清华大学 郑 莉
C++语言程序设计
本章主要内容
清华大学 郑莉
面向对象的思想 OOP的基本特点 类概念和声明
对象 构造函数 析构函数
内联成员函数 拷贝构造函数 类的组合 结构体与联合体 深度探索
2
C++语言程序设计
清华大学 郑莉
回顾:面向过程的设计方法
second; }
19
C++语言程序设计
清华大学 郑莉
成员数据
类
和
与一般的变量声明相同,但需要将它 放在类的声明体中。
对
象
20
C++语言程序设计
清华大学 郑莉
成员函数
类
和
在类中说明原型,可以在类外给出函数 体实现,并在函数名前使用类名加以限
对 定。也可以直接在类中给出函数体,形
象 成内联成员函数。
};
成员数据
18
void Clock::setTime(int newH, int newM, int newS) {
hour = newH; minute = newM; second = newS; } void Clock::showTime() { cout << hour << ":" << minute << ":" <<
C++语言程序设计
清华大学 郑莉
类的声明形式
类
和
类是一种用户自定义类型,声明形式:
class 类名称
对{
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
不同进位计数制间的转换
清华大学 郑莉
32
C++语言程序设计
——十进制→ R 进制 信 息 的 十进制小数转换成R进制小数 “乘 R 取整”法,例如: 表 高位 示 0.3125×2 = 0 .625 与 0.625 ×2 = 1 .25 存 0.25 ×2 = 0 .5 储
面向对象的基本概念
——对象
清华大学 郑莉
面 向 对 象 的 方 法
一般意义上的对象:
– 是现实世界中一个实际存在的事物。
– 可以是有形的(比如一辆汽车),也可 以是无形的(比如一项计划)。
– 是构成世界的一个独立单位,具有:
静态特征:可以用某种数据来描述 动态特征:对象所表现的行为或具有的功能
11
C++语言程序设计
清华大学 郑莉
程序设计方法的发展历程
面 向 对 象 的 方 法
——面向对象的方法
将数据及对数据的操作方法封装在一 起,作为一个相互依存、不可分离的 整体——对象。 对同类型对象抽象出其共性,形成类。 类通过一个简单的外部接口,与外界 发生关系。 对象与对象之间通过消息进行通讯。
6
C++语言程序设计
清华大学 郑莉
计 算 机 语 言 的 发 展
面向对象的语言
优点:
使程序能够比较直接地反问题域的本 来面目,软件开发人员能够利用人类认识 事物所采用的一般思维方法来进行软件开 发。
7
C++语言程序设计
程序设计方法的发展历程
清华大学 郑莉
面 向 对 象 的 方 法
——面向过程的程序设计方法
C++语言程序设计
第一章 绪论
清华大学 郑 莉
C++语言程序设计
清华大学 郑莉
本章主要内容
计算机程序设计语言的发展 面向对象的方法 面向对象的软件开发 信息的表示与存储 程序的开发过程
2
C++语言程序设计
清华大学 郑莉
计 算 机 语 言 的 发 展
计算机程序
计算机的工作是用程序来控制的
16
C++语言程序设计
面向对象的基本概念
——类
清华大学 郑莉
面 向 对 象 的 方 法
面向对象方法中的"类"
– 具有相同属性和服务的一组对象的集合
– 为属于该类的全部对象提供了抽象的描述, 包括属性和行为两个主要部分。
– 类与对象的关系: 犹如模具与铸件之间的关系,一个属于某 类的对象称为该类的一个实例。
清华大学 郑莉
面 向 对 OOP工作就是用一种面向对象的编 象 的 程语言把OOD模型中的每个成分书写出 软 来,是面向对象的软件开发最终落实的 件 开 重要阶段。 发
24
编程
C++语言程序设计
清华大学 郑莉
面 向 对 象 的 软 件 开 发
测试
测试的任务是发现软件中的错误。 在面向对象的软件测试中继续运用面 向对象的概念与原则来组织测试,以 对象的类作为基本测试单位,可以更 准确的发现程序错误并提高测试效率。
程序所描述的具体事物。
高级语言
5
C++语言程序设计
清华大学 郑莉
计 算 机 语 言 的 发 展
面向对象的语言
出发点:
–更直接地描述客观世界中存在的事物 (对象)以及它们之间的关系。
特点:
–是高级语言。 –将客观事物看作具有属性和行为的对象。 –通过抽象找出同一类对象的共同属性和 行为,形成类。 –通过类的继承与多态实现代码重用
25
C++语言程序设计
清华大学 郑莉
面 向 对 象 的 软 件 开 发
维护
将软件交付使用后,工作并没有完 结,还要根据软件的运行情况和用户的 需求,不断改进系统。 使用面向对象的方法开发的软件, 其程序与问题域是一致的,因此,在维 护阶段运用面向对象的方法可以大大提 高软件维护的效率。
26
C++语言程序设计
30
C++语言程序设计
——R 进制→十进制 信 息 的 各位数字与它的权相乘,其积相加。 表 例如: (11111111.11)2=1*27 + 1*26 + 1* 25 +1* 24 示 + 1* 23 + 1* 22 +1* 21+ 1* 20+1*2-1+1*2-2 与 =(255.75)10 存 (3506.2)8=3*83 + 5*82 + 0*81 + 6*80 +2*8-1 储 =(1862.25)10
程序是指令的集合。
指令是计算机可以识别的命令。
3
C++语言程序设计
清华大学 郑莉
计 算 机 语 言 的 发 展
机器语言与汇编语言
由计算机硬件系统可以识别的二进制指 令组成的语言称为机器语言。
计算机发展的初期,软件工程师们只能用机器 语言来编写程序。这一阶段,在人类的自然语言和 计算机编程语言之间存在着巨大的鸿沟。
22
C++语言程序设计
清华大学 郑莉
面 向 对 象 的 软 件 开 发
设计
针对系统的一个具体实现运用面向对 象的方法。其中包括两方面的工作:
– 把OOA模型直接搬到OOD,作为OOD 的一部分
– 针对具体实现中的人机界面、数据存储、 任务管理等因素补充一些与实序设计
汇编语言将机器指令映射为一些可以被 人读懂的助记符,如ADD、SUB等。
此时编程语言与人类自然语言间的鸿沟略有缩 小,但仍与人类的思维相差甚远。因为它的抽象层 次太低,程序员需要考虑大量的机器细节。
4
C++语言程序设计
清华大学 郑莉
计 算 机 高级语言屏蔽了机器的细节,提高了 语 言 语言的抽象层次,程序中可以采用具有 的 一定涵义的数据命名和容易理解的执行 发 语句。这使得在书写程序时可以联系到 展
14
C++语言程序设计
面向对象的基本概念
——对象
清华大学 郑莉
面 向 对 象 的 方 法
面向对象方法中的对象:
– 是系统中用来描述客观事物的一个实体, 它是用来构成系统的一个基本单位。对象 由一组属性和一组行为构成。 – 属性:用来描述对象静态特征的数据项。 – 行为:用来描述对象动态特征的操作序列。
15
C++语言程序设计
面向对象的基本概念
——类
清华大学 郑莉
面 向 对 象 的 方 法
分类——人类通常的思维方法 分类所依据的原则——抽象
– 忽略事物的非本质特征,只注意那些与 当前目标有关的本质特征,从而找出事 物的共性,把具有共同性质的事物划分 为一类,得出一个抽象的概念。 – 例如,石头、树木、汽车、房屋等都是 人们在长期的生产和生活实践中抽象出 的概念。
程序的目的:用于数学计算
主要工作:设计求解问题的过程
缺点:对于庞大、复杂的程序难以开发 和维护
8
C++语言程序设计
面 ——面向过程的结构化程序设计方法 向 设计思路 对 – 自顶向下、逐步求精。采用模块分解与 象 功能抽象,自顶向下、分而治之。 的 程序结构: 方 – 按功能划分为若干个基本模块,形成一 个树状结构。 法
29
C++语言程序设计
清华大学 郑莉
程序设计中常用的数制 信
息 的 表 示 与 存 储
进制 二进制 八进制 十进制 十六进制 基数 2 8 10 16 进位原则 逢2进1 逢8进1 逢 10 进 1 逢 16 进 1 基本符号 0,1 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7,8,9, 0,1,2,3,4,5,6,7,8,9, A,B,C,D,E,F
清华大学 郑莉
面 向 对 象 的 方 法
——多态性
多态是指在一般类中定义的属性或行 为,被特殊类继承之后,可以具有不 同的数据类型或表现出不同的行为。 这使得同一个属性或行为在一般类及 其各个特殊类中具有不同的语义。 例如:
数的加法->实数的加法 ->复数的加法
20
C++语言程序设计
清华大学 郑莉
0.5 ×2 = 1 .0 所以 0.312510 = 0.01012
不同进位计数制间的转换
清华大学 郑莉
33
C++语言程序设计
信 ——二、八、十六进制的相互转换 息 的 每位八进制数相当于三位二进制数 表 每位十六进制数相当于四位二进制数 示 (1011010.10)2=(001 011 010 .100)2 =(132.4)8 与 1010 .1000)2 存 (1011010.10)2=(0101 =(5A.8)16 储
面 向 对 象 的 软 件 开 发
系统分析
系统分析阶段应该扼要精确地抽象出 系统必须做什么,但是不关心如何去 实现。 面向对象的系统分析,直接用问题域 中客观存在的事物建立模型中的对象, 对单个事物及事物之间的关系,都保 留他们的原貌,不做转换,也不打破 原有界限而重新组合,因此能够很好 地映射客观事物。
(0.2A)16=2*16-1 +10*16-2=(0.1640625)10
不同进位计数制间的转换