白话编程---面向对象(2)探讨类

前言

        继续类的探讨

 引入

        在面向对象的概念中,沿用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就是一个资源类.此外还演示了一个移动效果的大致说明.再回到程序的初衷---数据表达逻辑,这里简单做了一个效果---直线移动.至此做了两件事:一是在屏幕上显示了一段静止的直线,二是实现了直线的移动.资源类有这个特点,本身没有动作.对比前面的"漆匠类",类的分类分为资源类和能动类.漆匠类属于能动类,有自己的动作.

        资源类

        概念:自身没有动作,产生效果由改变其属性而得.所以和资源类配套效果类.

        理解:资源类可以看作是直接或间接映射硬件寄存器的数据类 

你可能感兴趣的:(c++,c)