当前课程知识点:面向对象程序设计(C++) >  第五讲 找到对象,确定接口 >  5.3 接口在哪儿 >  Video

返回《面向对象程序设计(C++)》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《面向对象程序设计(C++)》慕课在线视频列表

Video课程教案、知识点、字幕

刚才两个比较简单的例子

现在我们要

开始进入比较复杂的阶段了

那么在一个比较复杂的

这么一个问题里面

我们怎么样去分析接口是什么

这个是我们的目标

我们要做一个

旋转方阵填充的这么一个程序

大家看一下

我要填充成什么样

这是一个6乘6的方阵

然后填充的方式就是从左上角开始

先向下再向右再向上

再向左这么旋转着往里填

依次往里填

我们的要求是矩阵的大小

就是几乘几的这是随意的

比如说3乘3 5乘5

7乘7都可以

尺寸

这个大小N应该

在运行的时候输入的

我们的设计思路

这也是我们最常用的设计思路

就是从上而下设计

首先我从最广泛的

最上层去设计

我们是要做一个类

这个类是用来表示这个矩阵

这个类应该被怎么样去使用

我们看这一小段程序

这里面首先我们是要定义这个类

用一个size来定义这个类

来定义这个类的一个实例

叫obj

然后就调用obj的一个fill

这个fill就是来填充这个obj

填充这个方阵

然后再用cout

这个小于小于

就是这个流运算符

来把这个类

给它输出到标准输出上去

这就是我们希望这个类的使用方法

相应的大家注意啊

相应的就是这个类

应该具有的最基本的接口

那么这个

我们就根据这个

刚才这个我们期待这么使用它

我们就可以定义成这个matrix这个类

它应该接口是什么样子的

我们看一下

首先它的初始化的时候

你要输入一个整形变量size

然后它要有一个

fill这么一个成员函数

一个public成员函数

相应的它还要对这个

小于小于这个流运算符进行重载

那么我们就开始去实现这个接口吧

首先需要哪些成员变量

因为我们这个类方阵大小

是可变的呀

那我们就必须把这个方阵大小

这个参数记录下来

对吧

这是我们需要的一个参数

还有你一个matrix你一个矩阵

你肯定要有一定的数据空间

去存储它

因为我已经定了这个矩阵是多大

N乘N的

那我知道每行是多长

那我就没有要说

把所有的行都定义出来了

为了简单起见

我们就直接定义个一位宿主data

以行优先的方式

把这些数据存在一位宿主里边

然后我们去

实现这个类的构造函数

实现它的析构函数

还有这个流运算符

重载的流运算符

我们看这段程序

构造函数的实现其实也很简单

首先我们把这个size

要注意啊

这里面我的成员变量的定义

是用一个下划线开头的

而参数的定义是

没有这个下划线开头的

这样的好处是什么呢

使用者来讲

它比较容易理解这个参数

同时呢也不容易出现

成员变量和参数同名

造成数据使用不准确的问题

那我这里面首先

我这个构造函数里面

先把这个size给它初始化了

然后用new分配一个

size乘size这么大小的

一段整数宿主

最后这个matrix

把这个整数宿主给它都置为0

初始化嘛

析构函数也很简单

就是把这个data这段空间给它释放掉

然后这个流操作符这个输出

实际上则是属于常规的做法了

用一个二重循环

把所有的都给它输出出去

下面是最关键的部分了

怎么去实现那个填充

怎么实现填充

实际上我们看这段程序

看这个图

我们实质上就是从1开始

把所有的数字

挨个放到正确的位置上就行了

那么相应的我们注意到

它这个填充的次序

是不断发生变化的

先向下再向右

又向上

又向左

那么我们怎么样去确定某一个数字

是要填在哪呢

当我们这个时候

其实我们有一个办法

先不考虑怎么去填充它

我们先假设有一个辅助函数

已经写好了

放在那了

它能够给我们提供这个功能

就是说我确定一下

下一个数字该填哪

那么我这findposition这个函数

已经在这了

不知道怎么来的

反正来了

我们看有这么个函数了

然后我们这个fill里边

我们使用这个findposition这个函数

我们就可以

把这个fill这么给它实现了对吧

从1开始

到N的平方

依次的找到它的position

要注意啊

我这position是一个int型的

是我们是按一类宿主来存的嘛

对吧

那么我们这个一位宿主里面存它

找到这个位置

然后把对应这个数字写到这个位置上

findposition怎么实现呢

我们等会再看

面向对象程序设计(C++)课程列表:

第一讲 课程简介与编程环境

-1.0 课程定位、教学内容

--课程定位与教学内容

-1.0 课程定位、教学内容--作业

-1.1 编程环境与工具

--程序结构与编译链接

--源程序拆分

--多文件编译链接的方法

-1.2 main函数的命令行参数

--main函数的命令行参数

-作业一--作业

第二讲 基础语法(1)

-2.1 变量定义

--变量定义

-2.2 变量的初始化、类型推导与基于范围的循环

--变量的初始化、类型推导与基于范围的循环

-2.3 函数重载

--函数重载

-2.4 函数参数的缺省值与追踪返回类型的函数

--函数参数的缺省值与追踪返回类型的函数

-2.5 类的定义

--类的定义

-2.6 类成员的访问权限与友元

--类成员的访问权限与友元

-第二讲 基础语法(1)--作业二

第三讲 基础语法(2)

-3.1 构造函数析构函数

--构造函数析构函数

-3.2 赋值运算符重载

--赋值运算符重载

-3.3 流运算符重载

--流运算符重载

-3.4 函数运算符重载

--函数运算符重载

-3.5 下标运算符与自增减运算符重载

--下标运算符与自增减运算符重载

-3.6 静态成员与常量成员

--静态成员与常量成员

-3.7 对象组合

--对象组合

-3.8 移动构造函数

--Video

--Video

-3.9 default修饰符

--Video

-第三讲 基础语法(2)--作业三

第四讲 基础语法(3)

-4.1 继承

--Video

-4.2 函数重写

--Video

-4.3 虚函数

--Video

--Video

-4.4 自动类型转换

--Video

-4.5 禁止自动类型转换

--Video

-4.6 强制类型转换

--Video

-4.7 函数模板

--Video

-4.8 类模板

--Video

-4.9 成员函数模板

--Video

-4.10 模板特化

--Video

-作业四--作业

第五讲 找到对象,确定接口

-5.0 引言

--Video

-5.1 从FOP到OOP

--Video

-5.2 对象在哪里

--Video

-5.3 接口在哪儿

--Video

-5.4 实现接口

--Video

-5.5 变与不变:多态的威力

--Video

第六讲 算法横向拆分,分离步骤

-6.0 引言

--讨论

-6.1 从负载监视器的设计开始

--从负载监视器的设计开始

-6.2 接口的分离与单一责任原则

--接口的分离与单一责任原则

-6.3 委托与接口的进一步分解

--委托与接口的进一步分解

-6.4 分离不同层面的可变性

--分离不同层面的可变性

第七讲 算法纵向拆分,分离表示

-7.0 引言

--Video

-7.1 迭代器

--Video

-7.2 迭代器的实现

--Video

-7.3 迭代器与模板

--Video

-7.4 算法与数据的解耦

--Video

-7.5 抽象结构与类模板

--Video

-7.6 函数对象与算法分解

--Video

-7.7 基于模板的策略模式

--Video

第八讲 基于接口组合,应对复杂变化

-8.0 引言

--Video

-8.1 已有资源的组合

--Video

-8.2 适当引入接口

--Video

-8.3 接口不变时的功能变化

--Video

-8.4 装饰

--Video

-8.5 责任的传递与责任链

--Video

-8.X 小结

--Video

第九讲 增加抽象层级,隔离复杂变化

-9.0 引言

--Video

-9.1 通过封装增加隔离、应对变化

--Video

--Video

-9.2 增加抽象层,应对变化

--Video

--Video

-9.3 相互关联对象的创建

--Video

-9.4 示例:自动组卷系统设计

--Video

-9.5 设计思路(上)

--Video

-9.6 设计思路(中)

--Video

-9.7 设计思路(下)

--Video

-9.X 小结

--Video

-课程总结

--Video

期末考试

-期末考试--作业

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。