继续类的探讨
在面向对象的概念中,沿用Java的思想,一切皆是对象.但Java把基本数据类型都归于对象,这是不必要的.----基本数据类型和对象分开.
蛋糕是对象,吃蛋糕是对象.工人可以是对象,工人做工也是对象.
他们都分在一个个的类里. 换句话说,一切皆归于类.
类的名称可以是名词,可以是动词,根据设计者的意图来决定.
题外话: 开始学习面向对象时,难免有些畏首畏尾,害怕出错,设计不合理.其实完全没有这个必要,想到什么就写什么.举个例子:中性笔做个类,里面包含了笔壳类对象,笔芯类对象,笔头类对象,暂时不知道他们具体长什么样,有什么功能,都可以先写出来.面向对象强大就在这里---从顶向下设计.在程序的世界里是有无限可能的.
暂时回到程序本身的目的:通过数据的变化来实现逻辑.
需求1:假设我们要设计一个表示"直线"的类,应该怎样考虑呢?
思路
1>"直线"在屏幕上显示,实际上是一排点数据显示在了屏幕上.这里需要调用一个api,传入表示直线的点集合-----------api是显卡驱动厂家或者操作系统提供的,不需要程序员自己写.
2>直线类需要一个坐标值,表示在屏幕上的位置, 需要一个长度值表示直线的长度
Line.h
#ifndef LINE_H_
#define LINE_H_
class Line{
private:
vector points;
public:
Line(int x,int y,int width);
}
class Point{
private:
int x;
int y;
public:
Point(int x1,int y1):x(x1),y(y1){}
}
#endif
line.cpp
#include "line.h"
Line::Line(int x,int y,int width)
{
points.emplace_back(Point(x,y)); //加入第一个点
for(int i=1;i<=width;i++)
{
points.emplace_back(Point(x+i,y)); //加入后面的点
}
}
现在我们传入坐标值和长度值,生成直线Line对象,再调用接口方法(必然有但这里没有),将点集合points传入就可以在屏幕上画一条线了.
需求2:让直线在屏幕上移动.
思路:动作=静态画面+延时;把动画变成静止画面的叠加.求出每一个静止画面.为了简单,就不设计新的类LineMove了.用一个函数---非可用代码来说明(如果有类,应该放在类方法里)
非可用代码!
以下代码不可以直接使用!!!
void lineMove(int time) //time延迟时间
{
for(int i=0;i
谢谢您看到这里,并且没有被上面没质量的代码所吓到. 是时候做一些说明了.
上面演示了一个资源类的定义.直线类line就是一个资源类.此外还演示了一个移动效果的大致说明.再回到程序的初衷---数据表达逻辑,这里简单做了一个效果---直线移动.至此做了两件事:一是在屏幕上显示了一段静止的直线,二是实现了直线的移动.资源类有这个特点,本身没有动作.对比前面的"漆匠类",类的分类分为资源类和能动类.漆匠类属于能动类,有自己的动作.
概念:自身没有动作,产生效果由改变其属性而得.所以和资源类配套效果类.
理解:资源类可以看作是直接或间接映射硬件寄存器的数据类