javayestome 发表于 2013-1-26 13:45:28

图像模拟类第2次实现 c++沉思录 第十章

<div class="highlighter">
[*]/*
[*]*=====================================================================================
[*]*
[*]*Filename:Frame_Pic.h
[*]*
[*]*Description:
[*]*
[*]*Version:1.0
[*]*Created:2009年01月08日15时57分43秒
[*]*Revision:none
[*]*Compiler:gcc
[*]*
[*]*Author:LiWeiJian(mn),lwj1396@163.com
[*]*Company:hunanuniversity
[*]*
[*]*=====================================================================================
[*]*/
[*]
[*]#ifndef_FRAME_PIC_H
[*]#define_FRAME_PIC_H
[*]
[*]#include<iostream>
[*]#include"Picture.h"
[*]
[*]usingnamespacestd;
[*]
[*]namespacelwj
[*]{
[*]
[*]classFrame_Pic:publicP_Node
[*]{
[*]friendclassPicture;
[*]friendPictureframe(constPicture&);
[*]friendPicturereframe(constPicture&,char,char,char);
[*]
[*]Frame_Pic(constPicture&,char='+',char='|',char='-');
[*]intheight()const
[*]{
[*]returnp.height()+2;
[*]}
[*]intwidth()const
[*]{
[*]returnp.width()+2;
[*]}
[*]voiddisplay(ostream&,int,int)const;
[*]Picturedoreframe(char,char,char);
[*]
[*]Picturep;
[*]charcorner;
[*]charsideborder;
[*]chartopborder;
[*]};
[*]
[*]Frame_Pic::
[*]Frame_Pic(constPicture&pic,charc,chars,chart):
[*]p(pic),corner(c),sideborder(s),topborder(t)
[*]{}
[*]
[*]voidFrame_Pic::
[*]display(ostream&os,introw,intwd)const
[*]{
[*]if(row<0||row>=height())//越界
[*]pad(os,0,wd);
[*]else
[*]{
[*]if(row==0||row==height()-1)//顶框和底框
[*]{
[*]os<<corner;
[*]inti=p.width();
[*]while(--i>=0)os<<topborder;
[*]os<<corner;
[*]}else//内部行
[*]{
[*]os<<sideborder;
[*]p.display(os,row-1,p.width());
[*]os<<sideborder;
[*]}
[*]pad(os,width(),wd);
[*]}
[*]}
[*]
[*]PictureFrame_Pic::
[*]doreframe(charc,chars,chart)
[*]{
[*]returnnewFrame_Pic(reframe(this->p,c,s,t),c,s,t);
[*]}
[*]
[*]
[*]Pictureframe(constPicture&pic)
[*]{
[*]returnnewFrame_Pic(pic);//使用了隐式转型操作符
[*]}
[*]
[*]}
[*]
[*]#endif
[*]/*
[*]*=====================================================================================
[*]*
[*]*Filename:HCat_Pic.h
[*]*
[*]*Description:
[*]*
[*]*Version:1.0
[*]*Created:2009年01月08日16时00分54秒
[*]*Revision:none
[*]*Compiler:gcc
[*]*
[*]*Author:LiWeiJian(mn),lwj1396@163.com
[*]*Company:hunanuniversity
[*]*
[*]*=====================================================================================
[*]*/
[*]
[*]#ifndefHCAT_PIC_H
[*]#defineHCAT_PIC_H
[*]
[*]#include"Picture.h"
[*]
[*]
[*]namespacelwj
[*]{
[*]classHCat_Pic:publicP_Node
[*]{
[*]friendPictureoperator|(constPicture&,constPicture&);
[*]friendPicturereframe(constPicture&,char,char,char);
[*]
[*]HCat_Pic(constPicture&,constPicture&);
[*]intheight()const
[*]{
[*]returnmax(left.height(),right.height());
[*]}
[*]intwidth()const
[*]{
[*]returnleft.width()+right.width();
[*]}
[*]voiddisplay(ostream&,int,int)const;
[*]
[*]Picturedoreframe(charc,chars,chart)
[*]{
[*]returnnewHCat_Pic(reframe(left,c,s,t),
[*]reframe(right,c,s,t));
[*]}
[*]
[*]private:
[*]Pictureleft,right;
[*]
[*]};
[*]
[*]HCat_Pic::
[*]HCat_Pic(constPicture&l,constPicture&r):
[*]left(l),right(r)
[*]{
[*]}
[*]
[*]voidHCat_Pic::
[*]display(ostream&os,introw,intwd)const
[*]{
[*]left.display(os,row,left.width());
[*]right.display(os,row,right.width());
[*]pad(os,width(),wd);
[*]}
[*]
[*]}
[*]#endif
[*]
[*]/*
[*]*=====================================================================================
[*]*
[*]*Filename:Picture2.cpp
[*]*
[*]*Description:图像处理,实现方案2,cpp沉思录第10章
[*]*
[*]*Version:1.0
[*]*Created:2009年01月08日14时09分56秒
[*]*Revision:none
[*]*Compiler:gcc
[*]*
[*]*Author:LiWeiJian(mn),lwj1396@163.com
[*]*Company:hunanuniversity
[*]*
[*]*=====================================================================================
[*]*/
[*]
[*]#include<iostream>
[*]#include<string>
[*]
[*]#include"Picture.h"
[*]
[*]usingnamespacestd;
[*]usingnamespacelwj;
[*]intmain()
[*]{
[*]constchar*cs[]={"hello","world"};
[*]Picturep(cs,2);
[*]Pictureq=frame(p);
[*]cout<<frame(p|(q&p))<<endl;
[*]cout<<endl<<endl;
[*]
[*]cout<<reframe(frame(p|(q&p)),'^','~','*')<<endl;
[*]}
[*]/*
[*]*=====================================================================================
[*]*
[*]*Filename:Picture.cpp
[*]*
[*]*Description:
[*]*
[*]*Version:1.0
[*]*Created:2009年01月08日17时27分18秒
[*]*Revision:none
[*]*Compiler:gcc
[*]*
[*]*Author:LiWeiJian(mn),lwj1396@163.com
[*]*Company:hunanuniversity
[*]*
[*]*=====================================================================================
[*]*/
[*]#include"Picture.h"
[*]
[*]#include"String_Pic.h"
[*]#include"Frame_Pic.h"
[*]#include"HCat_Pic.h"
[*]#include"VCat_Pic.h"
[*]
[*]namespacelwj
[*]{
[*]Picture::
[*]Picture(constchar*const*str,intn):
[*]p(newString_Pic(str,n))
[*]{}
[*]
[*]Picture::
[*]Picture(P_Node*p_node):p(p_node)
[*]{}
[*]
[*]Picture::
[*]Picture(constPicture&orig):p(orig.p)
[*]{
[*]orig.p->use++;
[*]}
[*]
[*]Picture::
[*]~Picture()
[*]{
[*]if(--p->use==0)
[*]deletep;
[*]}
[*]
[*]Picture&Picture::
[*]operator=(constPicture&orig)
[*]{
[*]orig.p->use++;
[*]if(--p->use==0)
[*]deletep;
[*]p=orig.p;
[*]return*this;
[*]}
[*]
[*]intPicture::
[*]height()const
[*]{
[*]returnp->height();
[*]}
[*]
[*]intPicture::
[*]width()const
[*]{
[*]returnp->width();
[*]}
[*]
[*]voidPicture::
[*]display(ostream&o,intx,inty)const
[*]{
[*]p->display(o,x,y);
[*]}
[*]
[*]
[*]ostream&operator<<(ostream&os,constPicture&picture)
[*]{
[*]intht=picture.height();
[*]for(inti=0;i<ht;i++)
[*]{
[*]picture.display(os,i,picture.width());
[*]os<<endl;
[*]}
[*]returnos;
[*]}
[*]
[*]
[*]Picturereframe(constPicture&pic,charc,chars,chart)
[*]{
[*]returnpic.p->doreframe(c,s,t);
[*]}
[*]
[*]
[*]Pictureoperator|(constPicture&l,constPicture&r)
[*]{
[*]returnnewHCat_Pic(l,r);
[*]}
[*]
[*]
[*]
[*]Pictureoperator&(constPicture&t,constPicture&b)
[*]{
[*]returnnewVCat_Pic(t,b);
[*]}
[*]}
[*]/*
[*]*=====================================================================================
[*]*
[*]*Filename:Picture.h
[*]*
[*]*Description:第二次实现时候,每个类分开写
[*]*
[*]*Version:1.0
[*]*Created:2009年01月08日15时51分33秒
[*]*Revision:none
[*]*Compiler:gcc
[*]*
[*]*Author:LiWeiJian(mn),lwj1396@163.com
[*]*Company:hunanuniversity
[*]*
[*]*=====================================================================================
[*]*/
[*]
[*]#ifndef_PICTURE_H
[*]#define_PICTURE_H
[*]
[*]#include<iostream>
[*]
[*]usingnamespacestd;
[*]
[*]namespacelwj
[*]{
[*]classP_Node;
[*]classPicture
[*]{
[*]friendostream&operator<<(ostream&,constPicture&);
[*]friendPictureframe(constPicture&);
[*]friendPictureoperator&(constPicture&,constPicture&);
[*]friendPictureoperator|(constPicture&,constPicture&);
[*]friendPicturereframe(constPicture&,char,char,char);
[*]
[*]friendclassString_Pic;
[*]friendclassFrame_Pic;
[*]friendclassHCat_Pic;
[*]friendclassVCat_Pic;
[*]
[*]public:
[*]Picture();
[*]Picture(constchar*const*,int);
[*]Picture(constPicture&);
[*]~Picture();
[*]
[*]Picture&operator=(constPicture&);
[*]
[*]private:
[*]Picture(P_Node*);
[*]intheight()const;
[*]intwidth()const;
[*]voiddisplay(ostream&o,intx,inty)const;
[*]P_Node*p;
[*]};
[*]
[*]
[*]classP_Node
[*]{
[*]friendclassPicture;
[*]friendPicturereframe(constPicture&,char,char,char);
[*]
[*]protected:
[*]P_Node():use(1){}
[*]virtual~P_Node(){}
[*]virtualintheight()const=0;
[*]virtualintwidth()const=0;
[*]virtualvoiddisplay(ostream&,int,int)const=0;
[*]virtualPicturedoreframe(char,char,char)=0;
[*]intmax(intx,inty)const
[*]{
[*]returnx>y?x:y;
[*]}
[*]intuse;//引用计数,每个P_Node可以对应多个Picture
[*]};
[*]
[*]staticvoidpad(ostream&os,intx,inty)
[*]{
[*]for(inti=x;i<y;i++)
[*]os<<"";
[*]}
[*]}
[*]#endif
[*]
[*]/*
[*]*=====================================================================================
[*]*
[*]*Filename:String_Pic.h
[*]*
[*]*Description:
[*]*
[*]*Version:1.0
[*]*Created:2009年01月08日15时55分38秒
[*]*Revision:none
[*]*Compiler:gcc
[*]*
[*]*Author:LiWeiJian(mn),lwj1396@163.com
[*]*Company:hunanuniversity
[*]*
[*]*=====================================================================================
[*]*/
[*]
[*]#ifndef_STRING_PIC_H
[*]#define_STRING_PIC_H
[*]
[*]#include"Picture.h"
[*]
[*]namespacelwj
[*]{
[*]classString_Pic:publicP_Node
[*]{
[*]friendclassPicture;
[*]
[*]String_Pic(constchar*const*,int);
[*]~String_Pic(){}
[*]
[*]intheight()const
[*]{
[*]returnsize;
[*]}
[*]intwidth()const
[*]{
[*]intn=0;
[*]for(inti=0;i<size;i++)
[*]n=P_Node::max(n,strlen(data));
[*]returnn;
[*]}
[*]voiddisplay(ostream&,int,int)const;
[*]
[*]Picturedoreframe(char,char,char)
[*]{
[*]use++;
[*]returnthis;
[*]}
[*]
[*]char**data;
[*]intsize;
[*]};
[*]
[*]String_Pic::
[*]String_Pic(constchar*const*p,intn):
[*]data(newchar*),size(n)
[*]{
[*]for(inti=0;i<n;i++)
[*]{
[*]data=newchar)+1];
[*]strcpy(data,p);
[*]}
[*]}
[*]
[*]voidString_Pic::
[*]display(ostream&os,introw,intwidth)const
[*]{
[*]intstart=0;
[*]if(row>=0&&row<height())
[*]{
[*]os<<data;
[*]start=strlen(data);
[*]}
[*]pad(os,start,width);
[*]}
[*]
[*]}
[*]#endif
[*]/*
[*]*=====================================================================================
[*]*
[*]*Filename:VCat_Pic.h
[*]*
[*]*Description:
[*]*
[*]*Version:1.0
[*]*Created:2009年01月08日15时59分07秒
[*]*Revision:none
[*]*Compiler:gcc
[*]*
[*]*Author:LiWeiJian(mn),lwj1396@163.com
[*]*Company:hunanuniversity
[*]*
[*]*=====================================================================================
[*]*/
[*]
[*]#ifndef_VCAT_PIC_H
[*]#define_VCAT_PIC_H
[*]
[*]#include"Picture.h"
[*]
[*]namespacelwj
[*]{
[*]classVCat_Pic:publicP_Node
[*]{
[*]friendPictureoperator&(constPicture&,constPicture&);
[*]friendPicturereframe(constPicture&,char,char,char);
[*]friendclassPicture;
[*]
[*]VCat_Pic(constPicture&,constPicture&);
[*]intheight()const
[*]{
[*]returntop.height()+bottom.height();
[*]}
[*]intwidth()const
[*]{
[*]returnmax(top.width(),bottom.width());
[*]}
[*]voiddisplay(ostream&,int,int)const;
[*]Picturedoreframe(charc,chars,chart)
[*]{
[*]returnnewVCat_Pic(reframe(top,c,s,t),
[*]reframe(bottom,c,s,t));
[*]}
[*]
[*]Picturetop,bottom;
[*]};
[*]
[*]VCat_Pic::
[*]VCat_Pic(constPicture&t,constPicture&b):
[*]top(t),bottom(b)
[*]{}
[*]
[*]voidVCat_Pic::
[*]display(ostream&os,introw,intwd)const
[*]{
[*]if(row>=0&&row<top.height())
[*]top.display(os,row,wd);
[*]elseif(row<top.height()+bottom.height())
[*]bottom.display(os,row-top.height(),wd);
[*]else
[*]pad(os,0,wd);
[*]}
[*]
[*]
[*]
[*]}
[*]#endif
[*]
页: [1]
查看完整版本: 图像模拟类第2次实现 c++沉思录 第十章