• 绘图室(PaintOffice)


        “绘图室”(PaintOffice)可以设计各个图形对象,每个图形对象包括坐标信息,并且可以通过构造函数初始化图形信息;每个图形对象提供Draw()函数,已完成自身的绘制,同时提供SetPos()成员函数来改变成员位置。本次设计中图形对象包括直线、椭圆、矩形三种,如果有兴趣的可以自行添加其他图形。每个类提供构造函数完成信息的初始化,类内没有系统能源申请,可以不要析构函数。Draw()、SetPos()函数可以看成类的成员函数。直线的坐标可用起点和终点的坐标来定位;矩形的坐标用左上角和右下角的坐标定位;椭圆的坐标可用椭圆的外接矩形来定位。

        下面列出其中一个图形对象(直线)的相关程序,其他图形对象类似。

     1 //line.cpp
     2  #include "line.h"
     3  #include
     4  using namespace std;
     5 
     6 Cline::Cline(int x1,int y1,int x2,int y2):CShape(x1,y1,x2,y2)
     7  {
     8   m_x1=x1;
     9   m_y1=y1;
    10   m_x2=x2;
    11   m_y2=y2;
    12  }
    13 
    14 void Cline::Draw()
    15  {
    16   cout<<"绘制直线"<<endl;
    17  }
    18 
    19 void Cline::SetPos(int x1,int y1,int x2,int y2)
    20  {
    21   m_x1=x1;
    22   m_y1=y1;
    23   m_x2=x2;
    24   m_y2=y2;
    25  }
    26 
    27 //line.h
    28  #pragma once
    29  #include"Shape.h"
    30  class Cline:public CShape
    31  {
    32  public:
    33   Cline(int x1,int y1,int x2,int y2);
    34   void Draw();
    35   void SetPos(int x1,int y1,int x2,int y2);
    36  private:
    37   int m_x1;//起点x坐标
    38   int m_y1;
    39   int m_x2;//终点x坐标
    40   int m_y2;
    41  };

        绘图室项目中的每个图形类都有坐标信息以及Draw()、SetPos()函数,这些成员可以作为一个共性放到一个基类中,有派生类继承。由于不同的图形类坐标信息的描述是一样的,所以坐标点和SetPos()函数适合放到父类中;但不同图形类的Draw()函数参数是一样的,只是具体实现不一样,所以在父类中可以设置为虚函数。

        设计的基类CShape相关程序如下:

     1 //Shape.cpp
     2  #include "Shape.h"
     3 
     4 CShape::CShape(int x1,int y1,int x2,int y2)
     5  {
     6   m_x1=x1;
     7   m_y1=y1;
     8   m_x2=x2;
     9   m_y2=y2;
    10  }
    11 
    12 void CShape::SetPos(int x1,int y1,int x2,int y2)
    13  {
    14   m_x1=x1;
    15   m_y1=y1;
    16   m_x2=x2;
    17   m_y2=y2;
    18  }
    19 
    20 //Shape.h
    21  #pragma once
    22  class CShape
    23  {
    24  public:
    25   CShape(int x1,int y1,int x2,int y2);
    26   virtual void Draw()=0;
    27   void SetPos(int x1,int y1,int x2,int y2);
    28  protected:
    29   int m_x1;//起点x坐标
    30   int m_y1;//起点y坐标
    31   int m_x2;//终点x坐标
    32   int m_y2;//终点y坐标
    33  };



    转载请注明出处:

    C++博客园:godfrey_88

    http://www.cnblogs.com/gaobaoru-articles/

    转载请注明出处: C++博客园:godfrey_88 http://www.cnblogs.com/gaobaoru-articles/
  • 相关阅读:
    js图片滑动展示
    那些好像失败了却很有趣的奇怪产物——傅里叶变换图片篇
    啊,满足了我对javaBean的所有幻想,记录一个神器:Lombok!
    十几行代码将mock生成的json数据转为sql的insert语句
    python之三目运算符的替代品?
    【python爬虫】每天统计一遍up主粉丝数!
    大项目之网上书城(十二)——完成啦
    大项目之网上书城(十一)——前台完成
    大项目之网上书城(十)——自动登录
    vs2019 创建vue项目
  • 原文地址:https://www.cnblogs.com/gaobaoru-articles/p/5448437.html
Copyright © 2020-2023  润新知