C++面向对象程序设计(第二章)
《面向对象的程序设计语言-C》课件-第2章
智能指new操作符在堆区域分配内存,可以有效利用内存。
2
智能指针
智能指针是一种模板类,可以自动释放指针指向的内存,避免了内存泄漏。
C+ + 11
向量和范围for循环
向量是一种可变长度数组, 范围for循环是一种更方便的 循环方式。
nullptr和类型推导
素的属性。
对象指针
• 对象指针是指向对象的指针。 • 通过对象指针可以访问对象的属性和方法。 • 对象指针可以指向对象数组中的某个元素。
常成员函数和常对象
1 常成员函数
常成员函数是指在函数声明中加入关键字const的成员函数,保护对象不被修改。
2 常对象
通过加上const关键字指定对象为常对象,不能修改常对象的成员变量。
nullptr是一种特殊的指针类 型,用于指向空值,类型推 导是自动推导变量类型的一 种机制。
移动语义和右值引用
移动语义是一种在容器中移 动元素的低开销方法,右值 引用是允许使用临时对象的 方式。
面向对象编程的实践应用
团队开发
多人协作、清晰任务分配和高效 沟通是团队开发中的三个重要环 节。
项目管理
封装性、继承性和多态性
1
封装性
封装性表示的是对数据和方法的访问权
继承性
2
限进行控制,隐藏了细节而暴露出接口, 实现了信息的隐藏。
继承性表示的是一个类可以派生出其他
类,继承自父类的属性和方法。它实现
了代码的重用性。
3
多态性
多态性表示的是同一个方法名可以具有 不同的实现,实现类与类之间的松耦合。
虚函数和抽象类
工作量评估、流程优化和风险控 制是一个项目管理周期中需要关 注的问题。
c面向对象程序设计(第二版)
c面向对象程序设计(第二版)面向对象程序设计是一种以对象为基本单位的编程范式,它强调数据和方法的封装、继承和多态性。
这种设计方法使得软件更加模块化、易于扩展和维护。
《面向对象程序设计(第二版)》这本书深入探讨了面向对象编程的基本概念、原理和实践,适合初学者和有经验的程序员学习。
第一章:面向对象编程基础面向对象编程(OOP)的核心概念包括类、对象、封装、继承和多态。
类是现实世界中某些具有共同特征的事物的抽象,而对象则是类的实例。
封装是将数据和操作这些数据的方法组合在一起,隐藏内部细节,只提供必要的接口。
继承允许新类从现有类中继承属性和方法,而多态性则允许对象以多种形式表现。
第二章:类与对象类是创建对象的蓝图。
定义类时,需要指定其属性(数据成员)和方法(成员函数)。
对象是类的实例,每个对象都拥有自己的状态和行为。
书中通过实例展示了如何定义类和创建对象,以及如何通过构造函数和析构函数管理对象的生命周期。
第三章:封装封装是OOP中最重要的概念之一。
它涉及到隐藏对象的内部状态,只通过公共接口与外界交互。
封装可以提高代码的安全性和可维护性。
书中详细讨论了访问修饰符(public、private、protected)的用法,以及如何使用它们来控制类成员的访问权限。
第四章:继承继承是面向对象编程中的另一个关键概念,它允许创建新的类来扩展或修改现有类的行为。
通过继承,可以避免代码重复,提高代码的复用性。
书中介绍了单继承和多继承的概念,以及如何使用继承来实现代码的层次结构。
第五章:多态性多态性允许对象以多种形式表现。
在OOP中,多态性主要通过虚函数和抽象类来实现。
虚函数允许子类重写父类的方法,而抽象类则定义了一组接口,但具体实现由子类完成。
书中讨论了多态性的实现机制,以及如何在实际编程中应用多态性。
第六章:接口与抽象类接口定义了一组方法,但不提供实现。
抽象类是包含至少一个纯虚函数的类。
它们都用于定义对象的契约,确保对象实现特定的行为。
C++面向对象程序设计ppt课件第2章
注意
构造函数也可采用构造初始化表对数据成员进行初始化
class Date { private: int year,month,day; public: Date(int y,int m,int d):year(y),month(m),day(d){} //构造函数初始化表对数据成员进行初始化 //…… };
对象数组和对象指针
对象数组
数组的元素可以是基本数据类型的数据,也可以是用户自定义数据类型 的数据。对象数组是指每一个数组元素都是对象的数组。对象数组的元 素是对象,它不仅具有数据成员,而且还有成员函数。
声明对象数组的形式
类名 数组名[下标表达式];
数组名[下标].成员函数
对象数组和对象指针
[例2-11] 对象数组的应用:求圆的面积 [例2-12] 输出若干个平面上的点 访问一个对象既可以通过对象名访问,也可以通过对象地址访
//让p指向一个类型为整型的堆地址,该地址中存放值100
//让p1指向一个类型为实型的堆地址
运算符new
用new创建堆对象的格式:
类名 *指针名= new 类名([构造函数参数]);
Complex *c1=new Complex(1.1,2.2); //创建对象*c1,并调用构造函数初始化数据成员real、imag为1.1、2.2
delete []p; //释放为数组动态分配的内存
说明
new和delete需要配套使用,如果搭配错了,程序运行时将会发生不可 预知的错误。 在用delete 释放指针所指的空间时,必须保证这个指针所指的空间是用 new申请的,并且只能释放一次,否则将产生指针悬挂问题。(见第七 章运算符重载)
构造函数
定义构造函数原型的格式为:
C#面向对象程序设计及实践教程PPT第二章
2.1.2 简单值类型
注意: 默认情况下,赋值运算符“=”右侧的实数被视为double 类型,如果要指定为float类型,需要在数字后面加上F (或f)后缀。如果要指定为decimal类型,需要在数字 后面加上M(或m)。 例如: double d = 2.5; float y = 3.6f; decimal m = 10.1m;
2.1.2 简单值类型
简单值类型包括整型、浮点型、布尔型、字符型。 1.整型
根据整型数据在计算机内存中需要的存储空间和取值范围,可 以将C#语言中的整型分为8种类型,如下表所示。 数据类型 sbyte byte short ushort int uint long ulong 说明
8位有符号整数 8位无符号整数 16位有符号整数 16位无符号整数 32位有符号整数 32位无符号整数 64位有符号整数 64位无符号整数
第二章 C#语法基础
主要内容:
2.1 2.2 2.3 2.4 2.5 数据类型 运算符和表达式 程序控制语句 数组 案例
【教学目标】
掌握常量和变量的声明和使用 掌握C#数据类型及其用法 掌握C#运算符和表达式及其用法 掌握C#程序控制语句及其用法 掌握数组的基本概念、声明和初始化数组 的方法,以及访问数组元素的方法
取值范围
-128~127 0~255 -32 768~32 767 0~65 535 -2 147 483 648~2 147 483 647 0~4 294 967 295 -9 223 372 036 854 775 808~9 223 372 036 854 775 807 0~18 446 744 073 709 551 615
}}}
2.1.1变量和常量
C面向对象程序设计谭浩强二PPT课件
C++
2- 2
2.1 面向对象程序设计方法概述
什么是面向对象的程序设计? 面向对象的程序设计(Object-Oriented Programming )和传
统的结构化程序设计的思路完全不同。面向对象的程序设计 和人们日常生活解决问题的思路是相似的。
比如,我们生产汽车时,不是顺序制造发动机,在设计 制造底盘、车身、轮子。而是分别设计制造发动机、底盘、 车身和轮子,最后组装在一起。组装时,各部件之间有联系, 以便协调工作。例如,司机踩油门,就能调节油路,控制发 动机的转速,就能驱动车轮。
就是对象的“属性”,函数就是用来对数据进行的“操作”, 以便实现某种功能。这种操作就是对象的“行为”,也叫 “方法”。我们点击一下鼠标,按动键盘的一个按钮,就是 给某个对象一个消息,系统会调用该对象中的函数进行操作。
比如长方形对象,其长和宽就是它的属性,调用该对象 的一些函数,即向该对象传送一些消息,可以用来对其长、 宽值进行加工计算,以实现求出面积、周长等功能。
C++
2- 4
2.1 面向对象程序设计方法概述
什么是对象(object)?
一个对象由一组“属性”和一组“行为”构成。并根据 外界给它的消息进行相应的操作。系统中多个对象通过一定 的渠道相互联系。
任何事物都可以看成一个对象。可以是自然物体,也可
以是逻辑结构。我们以一个班级为例。一个班级作为对象,
有两个要素:一是班级的静态特征,如班级所属的专业,学
生
成可执行文件。
C++
2- 11
【 C++语言与面向对象的程序设计】
面向对象的程序设计是在吸收结构化程序设计的一切优点的基础 上发展起来的一种新的程序设计方法,其本质是把数据和处理数据的
《C#面向对象程序设计》第2章:C#编程基础
主要内容与学习目标 2.1 变量与常数 2.2 基本数据类型 2.3 面向对象程序设计初步
主要内容与学习目标
主要内容: 主要内容: – (1)变量与常数、声明变量、给变量赋值、读取变量的值、MessageBox.Show方法、连接字符串、换行符。 变量与常数、 方法、 变量与常数 声明变量、给变量赋值、读取变量的值、 方法 连接字符串、换行符。 – (2)基本数据类型、整型、读取ห้องสมุดไป่ตู้文本框中输入的值、将计算结果显示在文本框中、将数字字符串转换为整数、异 基本数据类型、 基本数据类型 整型、读取从文本框中输入的值、将计算结果显示在文本框中、将数字字符串转换为整数、 格式异常、 处理。 常(格式异常、溢出异常 处理。 格式异常 溢出异常)处理 – (3)字符数据类型、将指定字符串转换为字符、将字符转换为字符串、Char数据类型和数值类型之间的转换、 字符数据类型、 数据类型和数值类型之间的转换、 字符数据类型 将指定字符串转换为字符、将字符转换为字符串、 数据类型和数值类型之间的转换 Char.IsLetter方法、Char.IsDigit方法。 方法、 方法。 方法 方法 – (4)非整型数据类型、Single.Parse(s)方法、Decimal.Parse(s)方法、格式化字符串、求幂运算、非整数数据类型 非整型数据类型、 方法、 方法、 非整型数据类型 方法 方法 格式化字符串、求幂运算、 比较。 比较。 – (5)格式化输出。 格式化输出。 格式化输出 – (6)算术表达式与算术运算符、算术运算符优先级规则。 算术表达式与算术运算符、 算术表达式与算术运算符 算术运算符优先级规则。 – (7)基本数据类型的相互转换、隐式数值转换、显式转换。 基本数据类型的相互转换、隐式数值转换、显式转换。 基本数据类型的相互转换 – (8)bool类型变量、关系运算符、关系表达式、关系表达式的值。 类型变量、 类型变量 关系运算符、关系表达式、关系表达式的值。 – (9)面向对象程序设计初步、类和对象、消息和方法、创建自己的类、声明类、声明字段、了解修饰符 面向对象程序设计初步、 面向对象程序设计初步 类和对象、消息和方法、创建自己的类、声明类、声明字段、了解修饰符private和 和 public、声明方法、声明对象与创建对象、调用方法。 、声明方法、声明对象与创建对象、调用方法。 – (10)局部变量、局部变量的作用范围和实例字段的作用范围。 局部变量、 局部变量 局部变量的作用范围和实例字段的作用范围。 学习目标: 学习目标: – (1)掌握变量与常数的含义、声明和使用。 掌握变量与常数的含义、 掌握变量与常数的含义 声明和使用。 – (2)了解数据类型及使用。 了解数据类型及使用。 了解数据类型及使用 – (3)了解数据类型的转换及溢出。 了解数据类型的转换及溢出。 了解数据类型的转换及溢出 – (4)初步掌握 初步掌握MessageBox.Show方法的使用。 方法的使用。 初步掌握 方法的使用 – (5)掌握如何向项目中添加类和引用。 掌握如何向项目中添加类和引用。 掌握如何向项目中添加类和引用 – (6)掌握赋值运算符的使用。 掌握赋值运算符的使用。 掌握赋值运算符的使用 – (7)掌握算术运算符和关系运算符的使用。 掌握算术运算符和关系运算符的使用。 掌握算术运算符和关系运算符的使用 – (8)初步掌握类和对象的使用。 初步掌握类和对象的使用。 初步掌握类和对象的使用
C面向对象程序设计第2章_类和对象PPT课件
成 员
float score;
void display( )//函数成员
{
<<endl;
cout<<”number: ”<< number; 成
cout<<”name: ”<< name;
员
cout<<”score: ”<< score
函
数
}
};
11
一个复数结构的例子
struct complex{ double real; double image; void init(double r,double i) { real=r; image=i; } double realcomplex() { return real; } …;
公有的。 • 此处所指成员包括数据成员和成员函数。
13
私有成员和公有成员的声明
struct complex{ private:
double real; double image; public: void init(double r,double i) { real=r; image=i; } double realcomplex( ) { return real; } …; };
/*独立函数display */
{
void display(Student * stu)
cout<<”number: ”<< number; 成
{
cout<<”name: ”<< name;
员
printf(”number:%d”,stu->number);
cout<<”score: ”<< score
《C面向对象程序设计》谭浩强第二章
多态意味着一个接口可以有多种实现方式,或者一个对象可 以表现出多种形态。在C中,多态性主要通过虚函数和纯虚函 数来实现。
多态的实现方式
总结词
多态可以通过虚函数和纯虚函数来实现。
详细描述
虚函数允许子类重新定义父类的成员函数,从而实现动态绑定。纯虚函数则是一种特殊的虚函数,它没有实现, 子类必须实现它才能成为可实例化的类。
定义构造函数和析构 函数
构造函数用于初始化对象的状态 ,析构函数用于释放对象所占用 的资源。通过定义构造函数和析 构函数,可以控制对象的状态和 资源的生命周期。
使用私有成员变量和 公有成员函数
私有成员变量用于存储对象的内 部状态,公有成员函数用于提供 对私有成员变量的访问和控制。 通过这种方式,可以控制外部程 序对对象内部状态的访问。
04
CATALOGUE
继承
继承的概念
继承是面向对象程序设计中的一个重要概念, 它允许一个类继承另一个类的属性和方法,从 而减少代码重复,提高代码复用性。
继承使得子类可以继承父类的属性和方法,同 时还可以定义自己的属性和方法,以扩展父类 的功能。
通过继承,子类可以重用父类的代码,减少开 发时间和工作量,同时提高代码的可维护性和 可扩展性。
03
CATALOGUE
封装
封装的含义
封装是指将对象的属性和行为封装到一个独立的实体中,这个实体称为类。通过封装,对象的属性和 行为被隐藏在类内部,只通过公共接口与外界交互。
封装实现了信息隐藏,使得对象的内部状态对外部程序不可见,从而保护对象内部数据不被随意修改。
封装有助于提高软件的可维护性和可复用性,因为类的实现细节被隐藏在类内部,可以在不影响其他程 序的情况下进行修改。
C面向对象程序设计第二章
C++
2- 6
2.1 面向对象程序设计方法概述
什么是对象封装(encapsulation )?
就是把对象的不想让外界知道的属性和功能屏蔽起来, 让外界看不见。封装有两个含义,一是将有关的数据和操作 函数封装成一个基本单位,即对象内。各对象之间相互独立, 互不干扰;二是将对象中的部分属性或功能对外隐蔽,只留 少数接口向外公布,以接收外界信息。
就是对象的“属性”,函数就是用来对数据进行的“操作”, 以便实现某种功能。这种操作就是对象的“行为”,也叫 “方法”。我们点击一下鼠标,按动键盘的一个按钮,就是 给某个对象一个消息,系统会调用该对象中的函数进行操作。
比如长方形对象,其长和宽就是它的属性,调用该对象 的一些函数,即向该对象传送一些消息,可以用来对其长、 宽值进行加工计算,以实现求出面积、周长等功能。
C++中,所谓多态性是指,由继承而产生的相关的不同 的类,其对象对同一消息会作出不同的响应。
显然,多态性能增加程序的灵活性,它是面向对象程序 设计的重要特征。
C++
2- 10
填空题
1.面向对象的系统最突出的特性是
、
、
。
2.C++语言是一种计算机编程语言,利用它编写的程序并不能
直接在计算机上运行,而是要经过 、 和
C++ 语言设计
第二章 类和对象
第一章 C++的初步知识 第二章 类和对象 第三章 再论类和对象 第四章 运算符重载 第五章 继承与派生 第六章 多态性与虚函数 第七章 输入输出流 第八章 C++工具
ቤተ መጻሕፍቲ ባይዱ
C++
C++面向对象程序设计第2章
型
类的定义格式: class 类名 类名 关键字 { private : 成员数据; 私有 成员函数; public : 公有 成员数据; 成员函数; 保护 protected: 成员数据; 成员函数; }; 分号不能少
class Student { private : char Name[20]; float Math; float Chiese; public : float average;
2.2.3 定义对象的方法
1. 先声明类类型,然后再定义对象 前面用的就是这种方法,如
Student stud1,stud2; //Student是已经声明的类类型
在C++中,声明了类类型后,定义对象有两种形式。 (1) class 类名 对象名 如 class Student stud1,stud2; 把class和Student合起来作为一个类名,用来定义对象。 (2) 类名 对象名 如 Student stud1,stud2;
2. 面向对象设计(object oriented design,OOD) 根据面向对象分析阶段形成的需求模型,对每一部 分分别进行具体的设计,首先是进行类的设计,类 的设计可能包含多个层次(利用继承与派生)。然后 以这些类为基础提出程序设计的思路和方法,包括 对算法的设计。在设计阶段,并不牵涉某一种具体 的计算机语言,而是用一种更通用的描述工具(如 伪代码或流程图)来描述。 3. 面向对象编程(object oriented programming, OOP)
在C++中也是先声明一个类类型,然后用它去定义若干个 同类型的对象。对象就是类类型的一个变量。可以说类是 对象的模板,是用来定义对象的一种抽象类型。 类是抽象的,不占用内存,而对象是具体的,占用存储空 间。在一开始时弄清对象和类的关系是十分重要的。
《面向对象程序设计》第二章教学
友元类
其他类可以访问该类的私有成员。
继承和派生的概念
1
继承
从现有类派生出新的类,子类继承父类的数据和方法。
2
多重继承
一个类可以从多个父类派生而来,拥有多个父类的特性。
3
派生
子类通过继承父类,可以扩展和修改父类的功能。
虚函数和多态性
多态性
同一种行为具有不同的表现形式,通过虚函数实 现运行时的多态性。
虚函数
允许子类重新定义和扩展父类的行为,实现动态 绑定。
运算符重载和类型转换
运算符重载பைடு நூலகம்
重新定义现有的运算符,使其适用于用户自定 义的数据类型。
类型转换
将一个类型的值转换为另一个类型的值,以适 应不同的需求。
《面向对象程序设计》第 二章教学
掌握面向对象编程的核心概念,包括类和对象、成员函数和数据成员,以及 构造函数和析构函数的重要性。
类和对象
理解类
通过抽象和封装数据和方法,类是面向对象编程 的基本组成单元。
创建对象
利用类的模板,实例化对象并为其分配内存,以 运行程序。
类和对象之间的关系
类是对象的蓝图,而对象是类的实际实例。
类的成员函数和数据成员
成员函数
类中的函数,用于操作和处理数据成员。
数据成员
类中的变量,用于存储对象的状态和属性。
类的构造函数和析构函数
1 构造函数
2 析构函数
在创建对象时调用,用于初始化对象的数 据成员。
当对象不再使用时调用,用于释放对象占 用的内存。
友元函数和友元类
友元函数
可以访问类的私有成员,但并不属于类的成员。
C程序设计 第二章 面向对象程序设计
(3)声明索引器,例如:
public int this[int index] { get{ return array[index];} set{ array[index]=value;} }
版权所有 32
C#程序设计与案例教程 清华大学出版社
2.4 域、属性和索引
版权所有
14
C#程序设计与案例教程 清华大学出版社
【案例2-1】雇员类。 该示例读取新雇员的名称和ID,逐个增加雇员计 数器并显示新雇员的有关信息以及新的雇员数。 为简单起见,该程序从键盘读取当前的雇员数。
版权所有
15
C#程序设计与案例教程 清华大学出版社
2.1.3 创建对象与构造函数
类声明后,可以创建类的实例,即对象。创建类 的实例需要使用new关键字。类的实例相当于 一个变量,创建类实例的格式如下: 类名 对象名=new 构造函数(参数类表); 例如: Point myPoint = new Point();
版权所有
11
C#程序设计与案例教程 清华大学出版社
2.类成员的可访问性
版权所有
12
C#程序设计与案例教程 清华大学出版社
3. 静态成员与实例成员
C#的类定义中可以包含两种成员:静态成员和 非静态成员(也即实例成员)。使用了static 修饰符的方法为静态成员,反之则是实例成员。
版权所有
13
C#程序设计与案例教程 清华大学出版社
版权所有
17
C#程序设计与案例教程 清华大学出版社
(4)类的构造函数可通过初始值设定项来调用基类 的构造函数,例如:
public Student(string no, string name,char sex,int age): base(name, sex,age) {}
第2章C面向对象程序设计
:size(right-left, bottom-top),
ptCenter((left+right)/2, (top+bottom)/2)
{}
void Show()
{ ptCenter.ShowPos();
size.ShowSize(); }
private:
CPoint ptCenter;
CSize size;
要实际在分配空间,因此不能在类声明中进行初 始化。静态数据成员初始化在类的外部进行,且 与一般数据 成员初始化不同,它的格式如下: <数据类型><类名>::<静态数据成员名>=<值> 例如:
2.1.5 静态成员
[例Ex_StaticData] 静态数据成员的使用
#include <iostream.h>
void ShowSize() { cout<<"当前大小:l = "<<nLength<<", w = "<<nWidth<<endl; }
private:
int nLength, nWidth;
};
class CRect
{
public:
CRect(int left, int top, int right, int bottom)
void ShowPos()
{ cout<<"当前位置:x = "<<nPosX<<", y = "<<nPosY<<endl;
}
private:
int nPosX, nPosY;
面向对象程序设计C第2章-数据类型和表达式.ppt
第2章 数据类型和表达式
2.3 常量与变量
2.变量的定义
变量在使用之前必须先定义,要声明自己的数据类型、存储类型。
变量的定义格式为:
数据类型 变量名1,变量名2,…,变量n;
例如:
int iSum, iLength, x, y; //定义4个整型变量iSum,iLength,x,y
char ch;
第2章 数据类型和表达式
2.2 基本数据类型
C++ 语 言 的 数 据 类 型 分 为 基 本 数 据 类型、构造数据类型和引用类型,如图 2-1所示。基本数据类型是C++系统内部 的数据类型,构造类型和引用类型都是 由基本数据类型建立起来的。
图2-1 C++的数据类型
目录页
第2章 数据类型和表达式
字节 4 4 2 2 4 4
数值范围 -2147483648~2147483647 0~4294967295 -32768~32767 0~65535 -2147483648~2147483647 0~4294967295
第2章 数据类型和表达式
2.2 基本数据类型
目录页
2.整型数据在内存中的存储形式 整型数据是以二进制数补码的形式存储的。对有符号数据,则存储单元的最高位为符号位,1表 示负数,0 表示正数。对无符号数据,则没有符号位,所有的存储单元均为数据位。假设用32个二进 制位(bit)存放一个int型数据,则有符号数据和无符号数据在内存中占用存储单元的情况如图2-2所 示。
表2-1
C++关键字
auto default explicit goto namespace register struct try while
C++面向对象程序设计(第二章)
类和对象的关系 声明类类型 定义对象的方法 类和结构体类型的异同
2.2.1类和对象的关系
关系的几点说明: C++中对象的类型称为类(class) 类代表了某一批对象的共性和特征 类是对象的抽象,而对象是类的具体实例 类是抽象的,不占用内存空间。对象是具体的, 要占用内存空间
2.2.2 声明类类型
可以看到声明类的方法是由声明结构体类型的方 法发展而来。用上面的方法声明的类类型表示其 中的各个成员对外面隐蔽,外界不能调用里面的 函数。在程序中无法执行对象st1、st2中的setdata、 display函数,因为缺少对外的接口这样的类是无 用的。所以不能把类中的所有成员与外界隔离, 一般是把数据隐蔽,而把成员函数作为对外的接 口。让外界发出命令,通知对象st1执行display函 数,输出该对象的数据。
2.4.2通过指向对象的指针访问成员
可以通过指针访问对象中的成员。 class Time { public: int hour; int minute; }; Time t, *p; t.hour=10; t.minute=20; p= &t; cout<< p->hour<<endl; cout<< *p.hour<<endl;
确定类及各类的属性和方法
设计各类及整体程序(对象调用) 用计算机语言把设计结果写成程序 在编译环境调试程序,发现、修改 问题,如VC++6.0 根据应用更新程序
2.2 类的声明和对象的定义
在设计程序时: 首先要声明类类型, 然后再定义类类型变量即对象。
• • • •
2.2.1 2.2.2 2.2.3 2.2.4
谭浩强《C++面向对象程序设计》第二章答案
谭浩强《C++面向对象程序设计》第二章答案-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN第二章1#include <iostream>using namespace std;class Time{public:void set_time();void show_time();private: //成员改为公用的 int hour;int minute;int sec;};void Time::set_time() //在main函数之前定义{cin>>hour;cin>>minute;cin>>sec;}void Time::show_time() //在main 函数之前定义{cout<<hour<<":"<<minute<<":"<<sec<< endl;}int main(){Time t1;();();return 0;}2:#include <iostream>using namespace std;class Time{public:void set_time(void){cin>>hour;cin>>minute;cin>>sec;}void show_time(void){cout<<hour<<":"<<minute<<":"<<sec<< endl;}private: int hour;int minute;int sec;};Time t;int main(){();();return 0;}3:#include <iostream>using namespace std;class Time{public:void set_time(void);void show_time(void);private:int hour;int minute;int sec;};void Time::set_time(void){cin>>hour;cin>>minute;cin>>sec;}void Time::show_time(void){cout<<hour<<":"<<minute<<":"<<sec<< endl;}Time t;int main(){ ();();return 0;}4://#include <iostream>using namespace std;#include ""int main(){Student stud;();();return 0;}//(即#include "" //在此文件中进行函数的定义#include <iostream>using namespace std; //不要漏写此行void Student::display( ){ cout<<"num:"<<num<<endl;cout<<"name:"<<name<<endl;cout<<"sex:"<<sex<<endl;}void Student::set_value(){ cin>>num;cin>>name;cin>>sex;}5://#include <iostream>#include ""int main(){Array_max arrmax;();();();return 0;}//#include <iostream>using namespace std;#include ""void Array_max::set_value() { int i;for (i=0;i<10;i++)cin>>array[i];}void Array_max::max_value() {int i;max=array[0];for (i=1;i<10;i++)if(array[i]>max) max=array[i]; }void Array_max::show_value() {cout<<"max="<<max<<endl; }6:解法一#include <iostream>using namespace std;class Box{public:void get_value();float volume();void display();public:float lengh;float width; float height;};void Box::get_value(){ cout<<"please input lengh, width,height:";cin>>lengh;cin>>width;cin>>height;}float Box::volume(){ return(lengh*width*height);}void Box::display(){ cout<<volume()<<endl;}int main(){Box box1,box2,box3;();cout<<"volmue of bax1 is "; ();();cout<<"volmue of bax2 is "; ();();cout<<"volmue of bax3 is "; ();return 0;}解法二:#include <iostream>using namespace std;class Box{public:void get_value();void volume();void display();public:float lengh;float width;float height;float vol;};void Box::get_value(){ cout<<"please input lengh, width,height:";cin>>lengh;cin>>width;cin>>height;}void Box::volume(){ vol=lengh*width*height;}void Box::display(){ cout<<vol<<endl;}int main(){Box box1,box2,box3;();();cout<<"volmue of bax1 is "; ();();();cout<<"volmue of bax2 is "; ();();();cout<<"volmue of bax3 is "; ();return 0;}。
C++面向对象程序设计(第2章)
2020/8/5
18
2.1 面向对象方法的基本特征
在程序设计语言中,消息表现为对象在其操作 过程中对另一个对象的服务程序的调用,即函 数调用。
例:给电话类对象myphone发送一个消息: 拨 电话号码。则发送方式为: char﹡myphone.dial(”82904456 ”);
2020/8/5
11
2.1 面向对象方法的基本特征
3、程序设计语言中的封装 在程序设计语言中用类来实现封装。 类是属性和操作的结合体,并且在定义
类的属性和操作时,规定了它们的可见性。 只有公有成员才能被外界访问。
2020/8/5
12
2.1 面向对象方法的基本特征
四、继承 例如:已定义电视机类,现需要定义彩色电视机类 解决方法:
4
举例:
对象名: 录音机 对象的属性:
静态特征
生产厂家: SONY
机器编号 :XXXX
出厂日期 :2014.05.06
对象的操作:
播放 录音
动态特征
停止
倒带
2020/8/5
5
2.1 面向对象方法的基本特征
二、类
1、定义
类是具有相同属性和操作的一组对象的集合,它为属 于该类的全部对象提供了统一的抽象描述。
2020/8/5
10
2.1 面向对象方法的基本特征
2、封装的特点
主机
具有一个清楚的边界,私 主板
内 USB接口
有成员封装在内部,外部 显卡
部
与
不可以访问
声卡
私 串行接口 外
提供必要的接口 对象内部的数据和方法是
内存
有
数据传输线 电源线成 员Fra bibliotek电源开关
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类定义格式(续):
private:只能被本类中的成员函数访问,类外 (除友元外)不能访问。 public:公有成员可以被本类的成员函数访问, 也能在类的作用域范围内的其他函数访问。 protected:受保护成员可由本类的成员函数访问, 也能由派生类的成员函数访问。 在定义类时,这三类成员不分前后顺序,也可以 重复出现。一般推荐最多出现一次。
在类外定义成员函数时,必须在函数中增加类名, 用于限定它属于哪个类,::是作用域限定符或称 作用域运算符。上面的例子中如果函数不用成员 访问限定符,函数就成了全局作用域中的display 函数而不是成员函数。 如果在::前不带类名,或函数名前既无类名又无 作用域运算符::,表示该函数是全局函数。
2.3.3 inline 成员函数
void Time::set_time() { cin>>hour; cin>>minute; cin>>sec; } void Time::show_time() { cout<<hour<<":"<<minute<<":"<<sec<<endl; }
例2.4在整型数组中找最大值
#include <iostream> using namespace std; class Array_max //声明类 {public: void set_value(); void max_value(); void show_value(); private: int array[10]; int max; };
C++程序设计
第二章
中国石油大学计算机系 2011.4
第2章 类和对象
2.1 2.2 2.3 2.4 2.5 2.6
面向对象程序设计方法概述 类的声明和对象的定义 类的成员函数 对象成员的引用(调用) 类和对象的简单应用 类的封闭性和信息隐蔽
2.1面向对象程序设计方法概述
2.1.1 2.1.2 2.1.3 2.1.4
例2.3 类成员的调用(续)
int main() { Time t1; t1.set_time(); t1.show_time(); Time t2; t2.set_time(); t2.show_time(); return 0; }
例2.3 类成员的调用(续)
void student :: setdata() { cin >> num; cin >> name; cin >> sex; } void student :: display() { cout<< num<<endl; cout<< name<<endl; cout<< sex <<endl; } student st1,st2;
图2.3 面向过程的程序设计模型
面向对象的程序设计思路
面向对象程序设计包括两个方面: ①设计所需的各种类,即决定把哪些数据和操作 封装在一起。 ②考虑怎样向对象发送消息(调用对象的成员函 数),实现所需的操作。 举例: 求图中阴影部分面积
2.1.4 面向对象的软件开发
1. 分析 2. 设计 3. 编程 4. 测试 5. 维护
类定义格式:
class 类名 { private: 私有成员声明 public: 公有成员声明 protected: 保护成员声明 };
•class是保留字,声明类类型
类名:按标识符取名。 •private、public、protected也 是保留字,是成员访问限定符,其 后必须跟冒号。 在类声明的 } 后如不直接定义对象 就必须跟分号。
2.5类和对象的简单应用举例
这小节通过几个例子说明怎样用类设计程序,以 及使用类的长处。
书上例2.1,2.2的设计方法不可取!
例2.3 类成员的调用
#include <iostream> using namespace std; class Time {private: int hour; int minute; int sec; public: void set_time() ; void show_time(); };
2.4.2通过指向对象的指针访问成员(续)
p->hour表示p当前指向对象t中的成员hour, 此时 (*p).hour也代表对象t中的成员hour,在这个例子 中,p->hour、(*p).hour、t.hour三种表示是一个意 思。
2.4.3通过对象的引用来访问对成员
分析: Time t1; Time & t2=t1; //对象t2是对象t1的引用 cout<< t2.hour; 这里t2是t1的别名,所以访问t2.hour就是访问 t1.hour。
2.3.3 inline 成员函数(续)
如果要把它作为inline函数,只需在函数声明时, 在函数头增加关键字inline。 class student { int num; string name; char sex; public: inline void setdata(); inline void display(); };
2. 在声明类类型的同时定义对象
class 类名 { private: … public: … } 对象名表;
在小型程序中或声明的类只用于本程序时,也可 采用第2种方法。
Class student { int num; string name; char sex; public: void setdata() { cin >> num; cin >> name; cin >> sex; } void display() { cout<< num<<endl; cout<< name<<endl; cout<< sex <<endl; } st1,st2;
在类内定义的成员函数: 默认是inline函数; 在类外定义成员函数时: 默认不把它当作inline成员函数,此时必须在声 明函数时在函数前加inline关键字。 在上面的例子中在函数声明里,函数头未加 inline,C++将把它当作非inline函数。 注:类外定义一般不用inline方式
什么是面向对象的程序设计 面向对象程序设计的特点 类和对象作用 面向对象的软件开发
2.1.1什么是面向对象的程序设计
设计的思路: 把一个复杂的事物分解成若干个简单部分(对 象),并使这些简单部分协同工作。 举例(生产汽车): 发动机 底盘 按一定顺序组装 车身 车轮
1. 对象
什么是对象? 客观世界中任何一个事物都可以看成一个对 象。 对象有何特征? 对象是构成系统的基本单位; 任何一个对象都具有静态和动态的特征; 静态特征称为属性,动态特征称为行为; 在C++ 中,每个对象由数据和函数组成。
2.4.2通过指向对象的指针访问成员
可以通过指针访问对象中的成员。 class Time { public: int hour; int minute; }; Time t, *p; t.hour=10; t.minute=20; p= &t; cout<< p->hour<<endl; cout<< *p.hour<<endl;
确定类及各类的属性和方法
设计各类及整体程序(对象调用) 用计算机语言把设计结果写成程序 在编译环境调试程序,发现、修改 问题,如VC++6.0 根据应用更新程序
2.2 类的声明和对象的定义
在设计程序时: 首先要声明类类型, 然后再定义类类型变量即对象。
• • • •
2.2.1 2.2.2 2.2.3 2.2.4
可以看到声明类的方法是由声明结构体类型的方 法发展而来。用上面的方法声明的类类型表示其 中的各个成员对外面隐蔽,外界不能调用里面的 函数。在程序中无法执行对象st1、st2中的setdata、 display函数,因为缺少对外的接口这样的类是无 用的。所以不能把类中的所有成员与外界隔离, 一般是把数据隐蔽,而把成员函数作为对外的接 口。让外界发出命令,通知对象st1执行display函 数,输出该对象的数据。
2.3 类的成员函数
在声明类时,必须定义了访问类数据成员的函数, 称之类的成员函数。
• • • •
2.3.1 2.3.2 2.3.3 2.3.4
成员函数的性质 在类外定义成员函数 内置函数 成员函数的存储方式
2.3.1 成员函数的性质
函数中的一种; 成员函数可以访问本类中的所有成员; public型的成员函数可以在类外被调用; private或protected型的成员函数的调用受特殊 条件限制。
举例
对象: 三角形 属性: 三条边长、三个角度 行为(方法): 计算三角形面积、输出计算结果
2. 封装与信息隐蔽
• 什么是封装: 把不必让外界知道的部分隐蔽起来。即把 对象的内部实现和外部行为分隔开来。 • 封装性的两个含义: ①把有关的数据和操作代码封装在一个对 象中,形成程序中的一个基本单位,各个 对象之间相互独立,互不干扰。 ②把对象中的某些部分对外隐蔽,只留下 与外界联系的接口接收外界的消息,这种 对外界隐蔽的做法称为信息屏蔽。 C++ 对象中的公有函数就是对象的对外接口。
类和对象的关系 声明类类型 定义对象的方法 类和结构体类型的异同
2.2.1类和对象的关系