大家好
欢迎来到实验4的上半部分
本章的目标是学习
类与对象的声明和使用
并了解构造函数 析构函数
以及类的组合等语法的应用
本部分的实验内容
是通过练习
来帮助大家进一步地理解
和掌握
类与对象的声明与使用
不同访问权限对象的调用过程
并观察构造函数
和析构函数的调用执行过程
在前面的章节中
我们只是接触到了
一般程序设计的基础知识
从本章开始
我们才接触到了
真正的面向对象程序设计的
有关方法
类是面向对象程序设计中
最基础 最重要的概念
也是面向对象程序设计方法中的
第一个难点
类是对逻辑上相关的数据
和函数的封装
是对问题的抽象
在接下来的例子里
我们就来练习一下
最基本的类与对象的声明
与使用
并观察构造与析构的执行过程
首先我们来看例题一
声明一个CPU类
包含等级 频率 电压等属性
有两个公有成员函数
run和stop
来启动CPU类的对象
和停止CPU类的对象
其中呢rank为枚举类型
给它起的一个名字叫
CPU_Rank
是这样声明的
frepuency为单位是Mhz的整型数
voltage为浮点型的电压值
大家需要注意的是
不同访问属性的成员访问方式
并且在调试的过程中
观察构造函数
和析构函数的调用顺序
我们来看已经准备好的代码
在这里首先声明了枚举类型
我们用enum这个关键字
声明了枚举类型CPU_Rank
从p1一直到p7
我们在这里指定了p的初始值为1
那么之后就顺次递增
p2的值对应的是2
p7的值对应的是7
接下来我们在这个基础上
声明CPU类
它有三个私有数据成员
分别是等级 频率
和电压
大家注意到rank 等级
用到的就是刚才我们
刚刚声明的自定义数据类型
这个枚举类型
CPU_Rank
那么它的Public公有成员
包括哪些呢
首先包括它的构造函数
这是一个包含
三个参数的构造函数
分别对应它的三个私有数据成员
以及它的析构函数
在构造函数和析构函数中
我们打印输出了语句
方便调试和观察
构造函数和析构函数的执行过程
除了这些公有的函数成员之外呢
还有下面一些函数成员
是一些外部的接口
包括访问
这三个私有数据成员的接口
以及设置
这三个私有数据成员的接口
最后按照题目的要求
我们还有Run和Stop
这样两个成员函数
分别用来输出CPU开始运行
和CPU停止运行
这样两条语句
我们再来看一下main函数
在main函数中
我们声明了一个CPU的对象
我们调用的是刚才声明的
带有三个参数的构造函数
我们给它进行了初始化
接下来呢
让这个已经声明的对象a
运行Run这个公有的成员函数
和Stop这个公有成员函数
最后整个main函数返回
接下来我们来调试一下
首先按下f11
按下f11之后
系统进入单步执行状态
程序开始运行
我们可以看到光标停在了
main函数的第1行
这个时候呢
这个对象a还没有进行初始化
运行到第一个初始化的语句
这个时候应该是去调用
CPU的构造函数
我们按下f11
跟踪到它的构造函数内部
这个时候光标停在了
CPU构造函数的第1行
我们可以看到这个时候形参
已经分别获得了实参传过来的值
要开始准备执行
构造函数的函数体了
继续按下f10
完成三个私有数据成员的赋值
最后到了cout
构造一个CPU函数的地方
我们把它执行完了
就可以看到
在屏幕上打印出了
刚才的这样一句话
再继续按下f10
回到了main函数的内部
完成了对象a的初始化
这个时候我们观察一下局部变量
对象a的三个私有数据成员
已经完成了初始化
接下来我们再按下f10
执行a.Run()这条语句
这个时候呢
按下f11跟踪到了Run的内部
它打印输出CPU开始运行
我们看到屏幕上确实
输出了CPU开始运行
这样一句话
再继续跟踪下去
我们就执行完了a.Stop
这样一个成员函数
输出了CPU停止运行
接下来需要注意的一点是
这个时候光标已经指向了return
那么在整个main函数return之前
还会做些什么事情呢
对 因为我们的对象a
在这里进行了构造
那么在整个main函数访问之前
它需要进行析构
我们按下f11来跟踪一下
果然在return语句执行之前呢
它会跳到CPU类的析构函数这里
进行析构函数的执行
我们再来观察一下
在这里确实输出了
析构了一个CPU
这样一条语句
然后我们整个main函数的执行
就结束了
接下来我想让大家仿照
刚才的例子
来做一个扩展练习
声明一个RAM类
和一个CDROM类
为实验4的下半部分
基于类的组合来构建计算机
Computer这个类
打下一个基础
那么大家在声明RAM类
和CDROM类的时候呢
可以参考下面的这样一些小提示
RAM类主要的参数主要包括
RAM的容量 类型
和主频
其中类型呢包括DDR4 DDR3
和DDR2等
建议大家使用枚举类型
而大家去声明
CD-ROM类的时候呢
只要考虑参数可以包括接口类型
缓存容量
安装方式等等
其中接口类型
建议大家用枚举类型
比如说是set up
或者是USB
安装方式呢
建议大家也用枚举类型
包括外部安装external方式
和内置安装built-in方式
在学习类的访问控制 构造函数
和析构函数的时候
很多同学
特别是学过C语言的同学
常常会想
这些语法究竟有什么用呢
难道写一个这么简单的小程序
也有必要搞得这么复杂吗
是的
C++其实是适合用于编写
大型程序设计的
C++之父Bjarne Stroustup说
C++是作为一种系统编程语言
作为一种为开发
由大型系统部件组成的应用
而进行设计的
因此
初学者在编写小型程序的时候
很难体会到C++的优越性
所以我在这里建议大家
在这一章的时候
先大概地了解
和掌握其语法规定
待到以后真正应用的时候
再去体会其中的妙处
这样一想
大家的心情是否能够轻松一些呢
第四章的上半部分就到这里
我们下次再见