c++面向对象第八章类和对象(2)
面向对象程序设计实验(二)2024

面向对象程序设计实验(二)引言概述:本文档旨在介绍面向对象程序设计实验(二)的相关内容。
实验(二)主要涉及面向对象程序设计中的基本概念和实践技巧。
通过本次实验,学生可以进一步巩固对于面向对象程序设计的理解和应用能力。
正文内容:1. 类与对象1.1 定义类和对象的基本概念1.2 区分类和对象的特点和属性1.3 类的成员变量与成员函数的关系1.4 类的继承与派生的用法和作用1.5 类型转换和类型检查的重要性和技巧2. 封装和继承2.1 封装的原则和目的2.2 不同类型的访问控制修饰符的应用与实践2.3 继承的基本概念和实现方法2.4 多态性的应用与实例解析2.5 接口与抽象类的定义和使用3. 异常处理3.1 异常处理的基本原则和作用3.2 异常的分类与处理方式3.3 异常处理的语法和使用方法3.4 异常处理的常见问题和解决策略3.5 异常处理的最佳实践和注意事项4. 面向对象设计的思想和原则4.1 面向对象设计的核心概念和思维方式4.2 SOLID设计原则的介绍和实践应用4.3 设计模式的分类和使用场景4.4 常用设计模式的详细介绍和实例应用4.5 面向对象设计的常见问题和解决策略5. 实践与案例分析5.1 针对实验要求的代码设计与实现5.2 对实验结果的分析和评价5.3 面向对象程序设计思想在实验中的运用和效果5.4 实际项目中的面向对象设计相关问题的解决方法5.5 实验总结和下一步改进计划总结:通过本次面向对象程序设计实验(二),学生能够更好地理解和应用面向对象的基本概念和设计原则,并能够灵活运用相关技巧进行程序开发和问题解决。
实验的实践部分更加加深了对面向对象程序设计的理解和实际应用能力的培养。
这些知识和技能对于学生未来的软件开发和项目管理工作具有重要意义。
类和对象的定义与使用

类和对象的定义与使用类是面向对象编程的基础之一,它是一个抽象的概念,用来描述具有相同属性和行为的某一类事物。
类可以包括数据成员(即属性)和函数成员(即方法)两部分,属性描述对象的状态,方法描述对象的行为。
类的定义一般包括如下几个部分:1. 类名:用来表示当前类的名称,通常使用大写字母开头的单词来命名。
2. 属性:用来描述当前类的状态,可以包括各种类型的变量或对象。
3. 方法:用来描述当前类的行为,可以包括各种类型的函数或过程。
例如,下面是一个简单的类的定义:class Person:name = ""age = 0def say_hello(self):print("Hello, my name is %s, I'm %d years old." % (, self.age))这个类叫做Person,包括两个属性name 和age,一个方法say_hello,它的作用是输出当前对象的姓名和年龄。
类的定义完成后,就可以用它来创建对象。
对象是由类创建出来的一个具体实例,它可以拥有自己独立的属性和方法。
创建对象的方法是调用类的构造函数(通常是__init__ 方法),并传递相应的参数。
例如:person = Person() = "Tom"person.age = 20person.say_hello()这个可以创建出一个名为Tom,年龄为20 的Person 对象,并调用它的say_hello 方法输出结果。
在Python 中,类和对象是非常重要的概念,学习掌握它们的使用方法是非常有必要的。
面向对象程序设计C课后题答案

第一章:面向对象程序设计概述[1_1]什么是面向对象程序设计?面向对象程序设计是一种新型的程序设计范型。
这种范型的主要特征是:程序=对象+消息。
面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。
第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。
面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。
这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。
[1_2]什么是类?什么是对象?对象与类的关系是什么?在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。
对象可以认为是:数据+操作在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。
类和对象之间的关系是抽象和具体的关系。
类是多个对象进行综合抽象的结果,一个对象是类的一个实例。
在面向对象程序设计中,总是先声明类,再由类生成对象。
类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。
[1_3]现实世界中的对象有哪些特征?请举例说明。
对象是现实世界中的一个实体,其具有以下一些特征:(1)每一个对象必须有一个名字以区别于其他对象。
(2)需要用属性来描述它的某些特性。
(3)有一组操作,每一个操作决定了对象的一种行为。
(4)对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。
例如:雇员刘名是一个对象对象名:刘名对象的属性:年龄:36 生日:1966.10.1 工资:2000 部门:人事部对象的操作:吃饭开车[1_4]什么是消息?消息具有什么性质?在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。
西安石油大学大二(上)C++面向对象程序设计课件C++8

第八章异常处理⏹异常类⏹抛出异常throw⏹捕捉异常try异常⏹定义程序在执行过程中出现的意外情况。
⏹分类☐用户输入错误☐设备故障☐物理限制☐代码错误传统异常处理方法⏹方法条件判断、分支处理⏹问题程序错误影响整个系统的运行。
最好是停止发生错误的局部操作,进行必要处理。
其他部分仍然继续运行。
C++异常处理方法⏹基本思想分离异常的抛出和异常的处理。
⏹基本方法当程序中出现异常时抛出异常,通知系统发生了异常,然后由系统捕捉异常,并交给预先安排的异常处理程序段来处理异常。
⏹优点方便通用软件模块的设计。
基本的异常处理方法//complex.h#include<iostream.h>class DivideZero{};class Complex{……Complex Divide(const Complex x)const;};Complex Complex::Divide(const Complex x) const {float c=x.real*x.real+x.imag*x.imag;if ( C==0) throw DivideZero();return Compelx( real*x.real + imag*x.imag)/c,x.real*imag – real* x.imag)/c); }//Exam8-1.cpp#include”Complex.h”void main(void){Complex x(1,1), y(0,0),z;try{z=x.Divide(y);cout << “z is: ” ;z.show();}catch(DivideZero){cout << “除数为0错!” << endl;}}多个异常的处理方法try{//可能抛出异常的语句段;}catch( <异常类1> ){//异常类1处理语句}……catch( <异常类n> ){//异常类n处理语句}例8.2 顺序堆栈类异常处理⏹异常类的定义和异常抛出☐入栈满异常类☐出栈空异常类⏹测试程序捕捉异常异常类的设计class PushOnFull //入栈满异常类{private:int value; //成员变量public:PushOnFull(int x): value(x) //构造函数{}int Value(void) //取value值成员函数{return value;}};class PopOnEmpty //出栈空异常类{};异常类的设计class SeqStack //顺序堆栈类{private:int *data; //数组int MaxStackSize; //数组个数int top; //当前栈顶下标public:SeqStack(int n); //构造函数~SeqStack(void); //析构函数void Push(const int item); //入栈int Pop(void); //出栈};异常类的设计SeqStack::SeqStack(int n) //构造函数{top = 0;MaxStackSize = n;data = new int[n];}SeqStack::~SeqStack(void) //析构函数{delete data;}异常类的设计void SeqStack::Push(const int item) //入栈{if(top == MaxStackSize) throw PushOnFull(item); data[top] = item;top++;}int SeqStack::Pop() //出栈{if(top == 0) throw PopOnEmpty(); //抛出异常top--;return data[top];}异常类的设计#include <iostream.h>#include "SeqStack2.h"void main(void){int i;SeqStack myStack(10);try //捕捉异常1{for(i = 0; i < 11; i++)myStack.Push(i+1);}catch(PushOnFull obj) //处理异常1{cout << "堆栈已满" << endl;cout << "当前要入栈的元素为:" << obj.Value();}异常类的设计try //捕捉异常2{for(i = 0; i < 11; i++)cout << myStack.Pop() << " ";}catch(PopOnEmpty) //处理异常2{cout << "堆栈已空" << endl;}}异常抛出和处理的两种方式异常的抛出和处理有两种方式:(1)在同一个函数中抛出异常和处理异常。
类和对象2 (3)

练习题目:使用面向对象的思想描述游戏中的怪物问题描述:某公司要开发新游戏,请用面向对象的思想设计怪物类,设定属性包括:怪物名字、生命值、攻击力、防御力;方法包括:攻击的方法,防御的方法.要求:1、通过构造函数实现属性赋值2、攻击方法,描述攻击状态。
内容包括怪物名字,生命值,攻击力3、防御方法通过输入参数接收攻击力。
需要判断,如果攻击力小于防御力,伤害值=0;反之伤害值=攻击力-防御力根据伤害值情况,显示不同的防御信息。
内容包括怪物名字,防御力,防御后的生命值.4、编写测试方法,通过构造函数实例化怪物类的对象,并调用相关方法(测试数据信息自定)运行效果:练习题目:使用面向对象的思想描述班级和学员信息问题描述:某公司要开发“学员管理系统”,请使用面向对象的思想,描述班级和学员信息要求:1、分析班级和学员的属性和方法,设计班级类和学员类2、在学员类中通过属性描述所在班级3、通过带参构造函数实现属性赋值4、编写测试方法实现信息输出参考分析思路:班级类:属性:班级编号,班级名称方法:介绍班级信息的方法。
通过输入参数描述班级口号,介绍信息中包括编号、名称学员类:属性:学号,姓名,性别,年龄,所在班级方法:学习的方法,描述学习状态。
描述内容包括姓名、学号、年龄、所在班级信息运行效果:要求将加减乘除的方法改写成带参方法,在定义一个运算方法ope(),接收用户选择的运算和两个数字,根据用户选择的运算计算结果。
运行如图所示:提示:定义方法ope(),参考如下:public int ope(int op,int num1,int num2){//实现返回运算结果}。
第八章 面向对象程序设计(1)

第八章 表单设计与控件应用
8.2 表单的创建与管理
创建表单
表单向导
表单设计器
第八章 表单设计与控件应用
8.2 表单的创建与管理
表单设计器打开
可视化:菜单和工具栏/项目管理器 命令:CREATE FORM|SCREEN
第八章 表单设计与控件应用
8.1 面向对象程序设计基础
属性(Property) 属性(Property) 是对象所具有 的某种特性和状态 特性和状态。 的某种特性和状态。 比如, 比如,按钮的大小 体现在高度 (height)和宽度 ) (width)属性上。 )属性上。 事件(Event) 事件(Event) 指对象能够识 别的动作。 别的动作。当触发 某个事件时, 某个事件时,该事 件的程序代码就会 开始执行。比如, 开始执行。比如, 单击文件图标。 单击文件图标。
第八章 表单设计与控件应用
8.3 表单设计器
设置对象属性 静态(对象初始状态):在属性窗口中设置。 ):在属性窗口中设置 静态(对象初始状态):在属性窗口中设置。 动态(对象运行状态):在程序代码中设置。 ):在程序代码中设置 动态(对象运行状态):在程序代码中设置。
格式:对象引用.对象的属性名=属性值
第八章 表单设计与控件应用(1) 表单设计与控件应用(1)
Contents
1 2
面向对象程序设计基础 表单的基本操作
第八章 表单设计与控件应用
第八章 表单设计与控件应用
第八章 表单设计与控件应用
8.1 面向对象程序设计基础
8.1.1 基本概念 对象(Object) 对象(Object) 具有某些特性的具体事物的抽象。 具体事物的抽象 具有某些特性的具体事物的抽象。 FoxPro中 在Visual FoxPro中,表单及控件等都是应用 程序中的对象。用户通过对象的属性 事件和 属性、 程序中的对象。用户通过对象的属性、事件和方 法程序来处理对象。 程序来处理对象。
c语言类和对象的定义
c语言类和对象的定义C语言中的类和对象定义在C语言中,类和对象是用来组织和管理代码的重要工具。
虽然C 语言并没有像C++或Java一样提供内置的类和对象机制,但我们仍然可以通过一些技巧来实现类似的功能。
1. 什么是类和对象?类是一种用户自定义的数据类型,它可以包含多个成员变量和成员函数。
对象是类的一个实例,通过创建对象可以使用类中定义的成员变量和成员函数。
2. 如何定义类?在C语言中,我们可以使用结构体来定义类。
结构体是一种可以存储不同类型的数据的数据类型,它可以包含多个成员变量。
例如,我们可以定义一个表示学生的类:```cstruct Student {char name[20];int age;float score;};```上述代码定义了一个名为Student的结构体,它包含了三个成员变量:name、age和score,分别表示学生的姓名、年龄和分数。
3. 如何创建对象?在C语言中,我们可以通过声明结构体变量来创建对象。
通过使用结构体变量名和点操作符,我们可以访问和修改对象的成员变量。
例如,我们可以创建一个名为stu的学生对象,并对其成员变量进行赋值:```cstruct Student stu;strcpy(, "Tom");stu.age = 18;stu.score = 90.5;```上述代码创建了一个名为stu的学生对象,并将其姓名设置为"Tom",年龄设置为18,分数设置为90.5。
4. 如何定义对象的行为?在C语言中,我们可以通过函数来定义对象的行为,这些函数可以操作对象的成员变量,实现一些特定的功能。
例如,我们可以定义一个函数来计算学生的平均分数:```cfloat calculateAverage(struct Student stu) {return stu.score / 3;}```上述代码定义了一个名为calculateAverage的函数,它接受一个学生对象作为参数,并返回该学生的平均分数。
第八章 类和对象 复习题知识讲解
第八章类和对象复习题第八章类和对象复习题1.系统为每个类提供一个this指针,在类的成员函数内,通过this指针可以间接访问这个类的( )所有成员C.友元类的public成员D.所有派生类中的public成员2.如果在class类的定义中既不指定private,也不指定public,则系统就默认为( )A. privateB. publicC. protectedD. 不确定3. 对静态数据成员的描述, 正确的是( )A. 静态数据成员可以在类体内进行初始化B. 静态数据成员不可以被类的对象调用C. 静态数据成员不能受private控制符的作用D. 静态数据成员可以直接用类名调用4. 下面叙述错误的是( )A. 基类的protected成员在派生类中仍然是protected的B. 基类的protected成员在public派生类中仍然是protected的C. 基类的protected成员在private派生类中是private的D. 基类的protected成员不能被派生类的对象访问5.对于友元函数的描述,正确的是( )A. 友元函数的实现必须在类的内部定义B. 友元函数是类的成员函数C. 友元函数破坏了类的封装性和隐藏性D. 友元函数不能访问类的私有成员6.关于内联函数的描述,正确的是( )A.使用内联函数可以缩短程序代码,减少占用的内存空间B.使用内联函数可以减少函数调用时入栈和出栈的时间和空间开销,但是会使程序的代码量增加C.内联函数只能在类的内部进行声明和定义,不能作为全局函数D.内联函数可以做虚函数7. 类是对象的( )A. 具体B. 抽象C. 封装D. 多态8. struct声明类时,若不作private或public声明,系统默认为( )A. privateB. publicC. protectedD. 不能确定9.引入内联函数的主要目的是( )A.缩短程序代码,少占用内存空间B.既可以保证程序的可读性,又能提高程序的运行效率C.占用内存空间少,执行速度快D.使程序的结构比较清晰10. 类的具体表现是通过定义来操作的。
面向对象的程序设计语言
引进了引用概念;
允许函数重载,允许设置缺省参数,提高了编 程的灵活性;
引进了内联函数,提高了程序的效率;
可以根据需要随时对变量进行说明;
a
7
1.3 C++程序的编辑、编译和运行
一、编辑:源文件的扩展名为.cpp 二、编译
1、预处理过程 词法分析:单词
2、编译 过程
语法分析:构造程序的格式 符号表:程序中的各种符号及其属性 错误处理程序:
最后Compile或Build程序,得到可执行的应用程序
a
23
第2节 数据类型和表达式
2.1 基本数据类型
2.2 常量和变量
2.3 数组类型
2.4 枚举类型
2.5 指针和引用
2.6 运算符
2.7 表达式
2.8 类型定义
a
24
2.1 基本数据类型一Leabharlann 基本数据类型基本数 据类型
整型int 浮点型(实型) 字符型char
浮点常量的缺省数据类型为double型; 后缀F(或f)表示float类型; 后缀l(或l)表示long double类型;
a
32
2.2.1 常量(续)
三、字符常量
由一对单引号括起的一个字符表示;
其值为所括起字符在ASCII表中的编码;
所括起字符的表示方法:
图形表示法 该方法适用于有图形符号的可打印字符; 例如:'A','a','*'
单精度浮点数float 双精度浮点数double
逻辑型bool
空值型void
a
用于函数和指针
25
2.1 基本数据类型(续)
二、数据类型修饰符
[计算机软件及应用]第8章第一部分 类与对象
class Date
{
public:
Date( );
// 默认构造函数
void setDate(int,int,int); // 设置年、月、日
17
class 类名
{ private:
私有数据和函数
public:
公有数据和函数
};
大括号后的分号“;”是类定义的结束
标志。类的成员分为数据和函数,分别
称为成员数据和成员函数。成员数据描
述类对象内部数据的结构,成员函数则
用于操作类对象的这些数据。
18
class Date
{ public:
Date( );
public: void putname(char *n); void getname(char *n);
private: long num;
public: void putnum(long n); long getnum();
};Leabharlann 24成员数据的说明 一般说来,类中的成员数据可以是任何类
型的。成员数据说明的形式等同C++程序中 一般变量的定义形式。
第八章 类与对象
1
80年代后期,在计算机软件领域发生了 许多变化,这些变化极大地影响着几乎所 有的程序设计者和系统分析员的工作。面 向对象的程序设计方法: (Object-Oriented Programming)就是其中之一。
OOP并不是一种程序设计语言,而是一 种新概念——关于数据、过程和它们之间 关系的一种新的思考方法。
int X,Y; 只是这里还要使用访问说明符(类型修饰 符)private、public和protected。在说明成员数 据时不再使用修饰符extern、auto、register。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cin>>t.minute;
cin>>t.sec; } void show_time(Time& t) { cout<<t.hour<<“:”<<t.minute<<“:”<<t.sec<<endl; }
第五节 类和对象的应用举例
★
归纳
◆
程序只在main函数中声明set_time函数
时指定了默认参数,在定义set_time时
Time t1; set_time(t1,12,23,34); show_time(t1); Time t2; set_time(t2); show_time(t2)
void set_time(Time& t,int hour,int minute,
int sec) // 定义与声明一一对应
{ cin>>t.hour;
cin>>t.minute;
cin>>t.sec;
} void show_time(Time& t) { cout<<t.hour<<“:”<<t.minute<<“:”<<t.sec<<endl; }
int main()
// 带缺省值情形 int minute=0,int sec=0);
{ void set_time(Time&,int hour=0, void show_time(Time&);
只需直接写数据成员名(也可以显示
写出类名并使用域运算符)
第五节 类和对象的应用举例
2、 应注意区分什么场合用域运算符::, 什么场合用成员运算符. ★ 在类体外定义成员函数时应指定类名,
调用成员函数时应指定具体的对象名
例4:找出一个整型数组中的元素的最大值
#include <iostream>
using namespace std;
分别是主模块main.cpp,student.cpp和
student.h
第六节 类的封装和信息隐蔽
2、 如果对成员函数的定义也放在类声明的 头文件中,那么,在对使用这些类的每
一个程序的每一次编译时都必然包括对
成员函数定义的编译 ★ 即同一个成员函数的定义会多次被重复 编译
第六节 类的封装和信息隐蔽
第六节 类的封装和信息隐蔽
二、 类声明和成员函数定义的分离
1、 面向对象程序设计中,一般将类的声明
(含成员函数的声明)放在指定的头文件
中,用户如果想使用该类,只要把有关
的头文件包含进来即可,不必在程序中 重复书写类的声明
第六节 类的封装和信息隐蔽
★
典例分析:P258
◆
这是一个包含3个文件的程序,3个文件
cin>>t1.hour;
cin>>t1.minute;
cin>>t1.sec;
cout<<t1.hour<<“:”<<t1.minute<<“:”<<t1.sec<<endl;
return 0; } // 运行情况分析(P250)
例2:引用多个对象的成员
// 在例1的基础上进行修改
int main()★Biblioteka stud1.num=1001;
// 假设num已定义为公用的数据成员
★
不能写为num=1001 // 这意味着将1001赋值给普通变量num
第四节 对象成员的引用
4、 归纳
★
不仅可以在类外引用对象的公用数据
成员,而且还可调用对象的公用成员
函数(但同样必须指出对象名)
★ 典例:sutd1.display();
第六节 类的封装和信息隐蔽
⑴
公用成员函数的作用
★
在类外虽然不能直接访问私有数据成员,
但可通过调用公用成员函数来引用甚至
修改私有数据成员的值
第六节 类的封装和信息隐蔽
⑵
公用成员函数不能轻易修改
★
用户可以调用公用成员函数来实现某些
功能,而这些功能是在声明类时就已经
指定的,用户可以使用它们但不应修改
第六节 类的封装和信息隐蔽
例1:最简单的例子
#include <iostream>
using namespace std; // 名字空间
class Time
{ public: int hour; int minute; int sec;
// 定义Time类
// 数据成员为公用
};
int main() { Time t1;
}
void Array_max::max_value() { int i,max=array[0]; for(i=0;i<10;i++) if(array[i]>max) max=array[i]; }
void Array_max::show_value()
{ cout<<“max=”<<max;} int main() // 主函数很简单和清晰
的通用的或专用的类 ★ 这样就大大减少了程序设计的工作量,
有效地提高了工作效率
cout<<t2.hour<<“:”<<t2.minute<<“:”<<t2.sec<<endl;
return 0; } // 在主函数中对不同的对象一一写出有关操作,会使 程序冗长,可使用函数来进行输入输出
int main()
// 通过函数调用实现
{ void set_time(Time&); // 函数声明
// 数据成员为私有
};
int main()
{ Time t1;
t1.set_time(); // 调用对象t1的成员函数
t1.show_time();
Time t2; t2.set_time(); t2.show_time(); return 0; }
void Time::set_time() // 在类外定义set_time函数
与通过指针引用结构体中的成员类似 典例分析(P249)
class Time
{ public:
int hour,minute; }; Time t,*p; // 定义对象t和指向Time类的 指针变量p p=&t; // 使p指向对象t cout<<p->hour // 输出p指向对象中的成员hour // 数据成员为公用
{ Time t1;
cin>>t1.hour; cin>>t1.minute; cin>>t1.sec;
cout<<t1.hour<<“:”<<t1.minute<<“:”<<t1.sec<<endl;
Time t2; cin>>t2.hour;
cin>>t2.minute;
cin>>t2.sec;
class A
{ private:
float x,y;
必须通过类内公有函 数访问私有数据成员
public:
float m,n; void Setxy(float a,float b ) { x=a; y=b; } void Print(void) { cout<<x<<„\t‟<<y<<endl; } };
第八章 类和对象
★
基本概念(对象)
★
★
对象成员
成员函数
第四节 对象成员的引用
一、 通过对象名和成员运算符访问对象中 的成员 1、 访问对象中成员的一般格式 ★ 对象名.成员名
第四节 对象成员的引用
2、 解释
★
点(.)是成员运算符,用来指明所访问
的是哪一个对象中的成员
第四节 对象成员的引用
3、 典例分析(参见P248)
class Array_max { public: void set_value(); void max_value(); void show_value(); private:
int array[10],max; };
void Array_max::set_value()
{ int i;
for(i=0;i<10;i++) cin>>array[i];
{ cin>>hour;
cin>>minute;
cin>>sec;
} void Time::show_time() { cout<<hour<<“:”<<minute<<“:”<<sec<<endl; }
第五节 类和对象的应用举例
1、 在类外定义函数时,应该指明函数的 作用域(如 void Time::set_time()) ★ 在成员函数引用本对象的数据成员时,
void show_time(Time&);
Time t1;
set_time(t1); show_time(t1); Time t2; set_time(t2); show_time(t2); return 0;}
void set_time(Time& t)
// 函数定义
{ cin>>t.hour;
★
典例:增加一项数据成员(年龄)