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

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

Video在线视频

Video

下一节:Video

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

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

刚才我们这个旋转矩阵

从一个看起来很复杂的问题

让我们一层一层的往下抽茧剥丝一样

一层一层往下抽

现在就发现还剩一个什么问题呢

这个findposition

这个findposition这个玩意怎么实现的

那么我们下边我们来看怎么去实现的

其实这是一个有点算法性质的问题了

因为我们发现旋转矩阵嘛

那么你是这么一步一步往下走的

这个走的过程中

每一个数字实际上

都跟上一个数字是相邻的

别管是上面下面左面右面

反正是相邻

那么我可以根据上一个数字在哪

和当前我应该往哪边走了

运动方向来确定

这个数字应该放在什么地方

所以我们就应该存储一下

上一个数字在哪

还有当前该往哪走

就是运动方向这么两个信息

所以我们在这个matrix里边

增加了这么几个变量

一个是row和char

就是上一个数字的位置

还有一个是dir

这是当前运动方向

接下来我们看那个初始状态

大家注意啊

看我们这个图里面

我们刚开始的时候这个是往下走的

第一个数字出现在左上角

那么我们的初始位置应该在哪呢

我们从什么地方向下走一步

能够到这个方针的左上角呢

左上角是00

那么谁在00的上边啊

00的上边意味着什么

它的行比00还要小一级

比0还要小一级

那就是-1

0

那么我们初始化的时候

就把这个row初始化成-1

char初始化成0

dir呢

这个方向呢

初始化成向下

接下来我们就根据这个当前位置

和方向去来计算下一个位置在哪

其实我们看这段程序啊

它实际上是一个switch

case这么一个结构

根据什么switch呢

就是根据当前运动方向switch

如果当前运动方向是向下

那么我们判断

是不是row小于size-1是不是

在我的有效的这个矩阵范围之内

然后再来判断它下一个位置是不是0

如果不是0意味着

下一个位置已经填充了

那别管是该出界了

还是已经填充了

意味着我该拐弯了对吧

那么当我row小于size

而且下一个位置是0的时候

意味着下一个位置这是要被填充的

那么我们就把这个row++

向下走一格

否则的话就意味着我或者是要出界

或者是下一个位置

它下面这个已经被填充了

那么就意味着该拐弯了

那么我们就把这个方向给它拐一个弯

向下之后是向右

那好我们这个方向就由D变成了right

然后把这个col++

向右走一格

其他的实际上也类似

当我向右的时候判断是不是超界

是不是已经填充完了

如果是没有

那么好我向右走一格

如果是有那么我变成向上

再row--向上走一格

向上和向左的时候是同理

这样都做完了之后

我们最后就把这个

下一个位置

row乘以size加col把它反回去

就获得了下一个位置

应该在哪的一个信息

好然后我们把这个程序跑一下

测试一下我们看到这个测试结果

这是我们用一个10乘10的这种测试

我们看这个红线就看出来了

它确实是按这个

旋转的方式把它正确的填充

但是这个产品经理又来了

我们的需求又变了

怎么变了呢

填充方式变了

我们不再简简单单的是一个

顺时针的旋转填充

我们需要要求多种不同方式来填充

可以顺时针

也可以逆时针旋转

可以行优先填充

可以列优先填充

还有一些别的其他的填充形式

那么大家可以发现

在我们这个类里边

其实无论你

采用什么样的填充方式

我的修改都集中在了

这个findposition这个成员函数里边

换句话说别的地方都不用动

只要把这个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笔记与讨论

也许你还感兴趣的课程:

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