漫漫编程路——C++篇(一)——关于矩形类

画出矩形是一个很基础的程序,当然这跟VC的MFC是有很大区别的,这里的只是通过C++的思想来实现一个概念上的矩形,而不是完整的图形,但一通则百 通,VC还是通过C++的思维方式来编程的,只是有了工具的帮助,能更有效的帮助我们编程罢了,当然以上只是我这个菜鸟编程者的个人理解,也许几年后我再 自己看这篇日志时还会笑自己的年幼无知也说不定啊。入正题,例题:
设 计一个程序,定义一个矩形类,包括数据成员和函数成员。要求有下列成员函数:Move():从一个位置移动到另一个位置;Size():改变矩形的大小; Where():返回矩形左上角的坐标值;Area():计算矩形面积。要确定一个矩形,只要确定其左上角和右下角的x和y坐标即可,因此应包括4个数据 成员,left、right、top和bottom,即左右上下四个边界值。由构造函数对数据成员赋值,赋值函数完成未初始化的矩形赋值,修改函数可以修 改各数据成员,显示函数则画出该矩形。
解答:刚开始看到这个题时,也许有跟我一样的小菜鸟会疑惑,我该怎么画出矩形呢?我刚开始也是,但是这道题 目并不是关于MFC的,这只是教你画出矩形,好不好看它课不管,应此你可以用*或者#来一个个拼凑矩形,我的思想也是这样,如果你有更美观的方法也可以使 用,个人审美观不同嘛,下面就是我写的程序
#include<iostream>
#include<iomanip>
#include <windows.h>
using namespace std;
class rectangle1{
private:
    int left,right,top,bottom;
public:
    void Set(int l,int r,int t,int b);
    void Move(int x,int y);
    void Where();
    void Area();
    void Print();

};
void rectangle1::Set(int l,int r,int t,int b)
    {
    if(l>=r||t>=b)
        cout<<"对不起,您的输入有误,无法创建矩形"<<'/n';
    else
    left=l;right=r;top=t;bottom=b;
    }
void rectangle1::Move(int x,int y){
for(int i=0;i<y;i++)
cout<<'/n'<<endl;
cout<<setw(x)<<setfill(' ')<<' ';
cout<<setw(right-left)<<setfill('*')<<'*'<<endl;
for(int i=1;i<bottom-top-1;i++)
{
cout<<setw(x)<<setfill(' ')<<' ';
cout<<'*'<<setw(right-left-2)<<setfill(' ')<<' '<<'*'<<endl;
}
cout<<setw(x)<<setfill(' ')<<' ';
cout<<setw(right-left)<<setfill('*')<<'*'<<endl;
left+=x;right+=x;
top+=y;bottom+=y;
}
void rectangle1::Where(){
cout<<'('<<left<<','<<top<<')'<<endl;
}
void rectangle1::Area(){
int length,width,area;
length=right-left;
width=bottom-top;
area=length*width;
cout<<area<<endl;
}
void rectangle1::Print(){
for(int i=0;i<top;i++)
cout<<'/n'<<endl;
cout<<setw(left)<<setfill(' ')<<' ';
cout<<setw(right-left)<<setfill('*')<<'*'<<endl;
for(int i=1;i<bottom-top-1;i++)
{
cout<<setw(left)<<setfill(' ')<<' ';
cout<<'*'<<setw(right-left-2)<<setfill(' ')<<' '<<'*'<<endl;
}
cout<<setw(left)<<setfill(' ')<<' ';
cout<<setw(right-left)<<setfill('*')<<'*'<<endl;
    }

void main(){
rectangle1 a;
int l,r,t,b,choice;
int x,y;
while(1){
    cout<<"   ***菜单***"<<'/n';
cout<<"1.创建一个新的矩形"<<'/n';
cout<<"2.移动矩形"<<'/n';
cout<<"3.改变矩形的大小"<<'/n';
cout<<"4.显示矩形左上角的坐标"<<'/n';
cout<<"5.计算矩形面积"<<'/n';
cout<<"6.显示矩形"<<'/n';
cout<<"7.退出"<<'/n';
cout<<"如果需要清屏,请选择0,谢谢使用"<<endl;
cout<<"请输入菜单号:";
cin>>choice;
switch(choice){
case 1:cout<<"请输入所要创建的矩形的边界值:";
    cin>>l>>r>>t>>b;
    a.Set(l,r,t,b);break;
case 2:cout<<"请输入移动矩阵的距离:";
    cin>>x>>y;
    for(int i=1;i<10;i++)
 {Sleep(200);
  system("cls");
  a.Move(i*x,i*y);
  }
     break;
case 3:cout<<"请输入改变后矩阵的边界值:";
    cin>>l>>r>>t>>b;
    a.Set(l,r,t,b);break;
case 4:cout<<"现在矩形左上角的坐标是:";
    a.Where();break;
case 5:cout<<"现在矩形的面积是:";
    a.Area();break;
case 6:cout<<"现在的矩形如下:"<<'/n';
    a.Print();break;
case 7:exit(0);
case 0:system("cls");break;
default:cout<<"对不起,您的输入是错误的"<<'/n';break;
}
}
}
当 然这个程序也有繁琐的地方,在Move()处,移动的输出的功能与Print()的功能有重合,因此可以将输出功能合并更好,还有在改变大小的那段有取巧 之处,主要是为了方便使用成员函数一个函数能多次使用,多好,还不用多谢代码,省时省力,少牺牲脑细胞还能延长寿命。这个程序的有趣之处是红字部分,这段 代码让矩形移动一下子可爱起来,有了动画效果,但是个人水平的问题,这个有趣之处也是我没有处理好之处,移动间距超出我的预料,这个是从倩倩同学的地方得 到的想法,确实很有趣······
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值