青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 41, 文章 - 8, 評論 - 8, 引用 - 0
數據加載中……

[導入][C++]c++沉思錄第10章例子“字符圖像”

雖然還不是很懂啊,但卻很有意思。

下面把辛辛苦苦打的代碼貼出來,大家一起學習。

下面是 Picture.h

#include<iostream>
using namespace std;
class P_Node{
 friend class Picture;

protected:
 P_Node();
 virtual ~P_Node();
 virtual int height() const=0;
 virtual int width() const=0;
 virtual void display
  (ostream&,int,int)const=0;
 //int max(int,int);
private:
 int use;
};

class Picture{
 friend ostream& operator<<(ostream&,const Picture&);
 friend Picture frame(const Picture&);
 friend Picture operator&(const Picture&,const Picture&);
 friend Picture operator|(const Picture&,const Picture&);
 friend class String_Pic;
 friend class Frame_Pic;
 friend class Hcat_Pic;
 friend class VCat_Pic;

public:
 Picture();
 Picture(const char* const*,int);
 Picture(const Picture&);
 ~Picture();
 
 Picture& operator=(const Picture&);
private:
 Picture(P_Node*);
 int height() const;
 int width() const;
 void display(ostream&,int,int) const;
 P_Node* p;
};


class String_Pic:public P_Node{
 friend class Picture;
 String_Pic(const char* const*,int);
 ~String_Pic();
 int height() const;
 int width() const;
 void display(ostream&,int,int) const;
 char** data;
 int size;
};

class Frame_Pic:public P_Node{
 friend Picture frame(const Picture&);
 Frame_Pic(const Picture&);
 int height() const;
 int width() const;
 void display(ostream&,int,int) const;
 Picture p;
};

class VCat_Pic:public P_Node{
 friend Picture operator&
  (const Picture&,const Picture&);
 VCat_Pic(const Picture&,const Picture&);
 int height() const;
 int width() const;
 void display(ostream&,int,int) const;
 Picture top,bottom;
};

class Hcat_Pic:public P_Node{
 friend Picture operator|
  (const Picture&,const Picture&);
 Hcat_Pic(const Picture&,const Picture&);
 int height() const;
 int width() const;
 void display(ostream&,int,int) const;
 Picture left,right;
};

下面是 Picture.cpp

#include"Picture.h"
#include<iostream>
#include<cstring>
using namespace std;

P_Node::~P_Node(){}
P_Node::P_Node():use(1){}

static void pad(ostream& os,int x,int y)
{
 for(int i=x;i<y;i++)
  os<<" ";
}
int max(int x,int y)
{
 return x>y?x:y;
}

Picture::Picture(const char* const* str,int n):
 p(new String_Pic(str,n)){}

Picture::Picture(const Picture& orig):p(orig.p)
{
 orig.p->use++;
};

Picture::Picture(P_Node* p_node):p(p_node){}

Picture::~Picture()
{
 if(--p->use==0)
  delete p;
}

Picture& Picture::operator=(const Picture& orig)
{
 orig.p->use++;
 if(--p->use==0)
  delete p;
 p=orig.p;
 return *this;
}

int Picture::height() const
{
 return p->height();
}

int Picture::width() const
{
 return p->width();
}

void Picture::display(ostream& o,int x,int y)const
{
 p->display(o,x,y);
}

ostream& operator<<(ostream& os,const Picture& picture)
{
 int ht=picture.height();
 for(int i=0;i<ht;i++){
  picture.display(os,i,0);
  os<<endl;
 }
 return os;
}

String_Pic::String_Pic(const char* const* p,int n):
 data(new char* [n]),size(n)
{
 for(int i=0;i<n;i++){
  data[i]=new char[strlen(p[i])+1];
  strcpy(data[i],p[i]);
 }
}

int String_Pic::height() const
{
 return size;
}

int String_Pic::width() const
{
 int n=0;
 for(int i=0;i<size;i++){
  n=max(n,strlen(data[i]));
 }
 return n;
}

void String_Pic::display(ostream& os,int row,int width)const
{
 int start=0;
 if(row>=0&&row<height()){
  os<<data[row];
  start=strlen(data[row]);
 }
 pad(os,start,width);
}

String_Pic::~String_Pic()
{
 for(int i=0;i<size;i++)
  delete[] data[i];
 delete[] data;
}

Frame_Pic::Frame_Pic(const Picture& pic):p(pic){}
int Frame_Pic::height()const
{
 return p.height()+2;
}
int Frame_Pic::width()const
{
 return p.width()+2;
}

void Frame_Pic::display(ostream& os,int row,int wd)const
{
 if(row<0||row>=height()){
  pad(os,0,wd);
 }else{
  if(row==0||row==height()-1){
   os<<"+";
   int i=p.width();
   while(--i>=0)
    os<<"-";
   os<<"+";
  }else{
   os<<"|";
   p.display(os,row-1,p.width());
   os<<"|";
  }
  pad(os,width(),wd);
 }
}

Picture frame(const Picture& pic)
{
 return new Frame_Pic(pic);
}

VCat_Pic::VCat_Pic(const Picture& t,const Picture& b):
 top(t),bottom(b){}

int VCat_Pic::height()const
{
 return top.height()+bottom.height();
}
int VCat_Pic::width()const
{
 return max(top.width(),bottom.width());
}
void VCat_Pic::display(ostream& os,int row,int wd)const
{
 if(row>=0 && row< top.height())
  top.display(os,row,wd);
 else if(row <top.height()+bottom.height())
  bottom.display(os,row-top.height(),wd);
 else
  pad(os,0,wd);
}
Picture operator&(const Picture& t,const Picture& b)
{
 return new VCat_Pic(t,b);
}

Hcat_Pic::Hcat_Pic(const Picture& l,const Picture& r):
 left(l),right(r){}

int Hcat_Pic::height()const
{
 return max(left.height(),right.height());
}
int Hcat_Pic::width()const
{
 return left.width()+right.width();
}
void Hcat_Pic::display(ostream& os,int row,int wd)const
{
 left.display(os,row,left.width());
 right.display(os,row,right.width());
 pad(os,width(),wd);
}

Picture operator|(const Picture& l,const Picture& r)
{
 return new Hcat_Pic(l,r);
}

 

下面是 test.cpp

#include<iostream>
#include<cstring>
#include"Picture.h"

using namespace std;

char *init[]={"Paris","in the","Spring"};
int main()
{
 Picture p(init,3);
 cout<<p<<endl;

 Picture q=frame(p);
 cout<<q<<endl;

 cout<<(q&(p|q))<<endl;

 cout<<frame(p|p)<<endl;

 cout<<frame(q|q)<<endl;

 cout<<(p&p)<<endl;

 cout<<(q&q)<<endl;

 cout<<frame(p&p)<<endl;
 cout<<frame(frame(q&q)|frame(p&p))<<endl;
 return 0;
}

閱讀全文
類別:c++ 查看評論
文章來源:http://hi.baidu.com/mirguest/blog/item/d91abdcd42caeb2ef8dc612e.html

posted on 2011-02-02 12:01 mirguest 閱讀(314) 評論(0)  編輯 收藏 引用 所屬分類: C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲日本一区二区三区| 欧美一级久久| 亚洲午夜精品网| 国产网站欧美日韩免费精品在线观看| 久久久久久久综合狠狠综合| 亚洲东热激情| 亚洲一区二区动漫| 欧美性天天影院| 香蕉久久精品日日躁夜夜躁| 欧美中文字幕视频| 亚洲毛片在线观看| 午夜欧美大尺度福利影院在线看| 亚洲国产精品综合| 亚洲欧美综合一区| 一本色道久久综合亚洲精品婷婷| 欧美一级午夜免费电影| 99精品国产热久久91蜜凸| 午夜国产精品影院在线观看| 久久天堂成人| 亚洲一区综合| 欧美精品v日韩精品v国产精品| 久久精品动漫| 欧美视频日韩| 最新日韩欧美| 精品二区视频| 亚洲欧美日韩一区| 亚洲小少妇裸体bbw| 欧美成ee人免费视频| 久久天堂成人| 国产欧美亚洲一区| 宅男在线国产精品| 日韩视频永久免费观看| 久久精品一区二区国产| 欧美在线啊v一区| 欧美深夜影院| 99re国产精品| a4yy欧美一区二区三区| 久久这里只有| 久久精品国产久精国产爱| 国产精品欧美日韩一区| 亚洲免费av电影| 久热国产精品视频| 香蕉亚洲视频| 亚洲午夜一区二区| av成人黄色| 欧美激情一区| 亚洲国产一区视频| 亚洲国产日韩在线| 久久综合久久综合九色| 狂野欧美激情性xxxx欧美| 国产偷国产偷亚洲高清97cao| 亚洲一区www| 欧美在线资源| 国产亚洲精品久久久久动| 性欧美大战久久久久久久免费观看| 亚洲自拍偷拍网址| 国产精品丝袜久久久久久app| 亚洲夜晚福利在线观看| 午夜精品免费| 国产一区二区无遮挡| 久久精品一区二区三区中文字幕| 久久久国产91| 免费成人小视频| 欧美午夜在线一二页| 日韩亚洲国产精品| 欧美精品一卡二卡| 在线一区二区日韩| 欧美在线精品免播放器视频| 国产一区二区你懂的| 久久欧美肥婆一二区| 亚洲大胆视频| 91久久在线播放| 亚洲午夜三级在线| 午夜欧美精品久久久久久久| 国产日韩欧美高清| 久久天天躁夜夜躁狠狠躁2022| 亚洲欧美文学| 一区二区三区精品| 欧美激情影音先锋| 亚洲综合国产激情另类一区| 国产视频一区在线| 久久精品91久久久久久再现| 美女爽到呻吟久久久久| 亚洲精品美女在线观看| 欧美人成免费网站| 亚洲在线视频一区| 欧美大片免费观看| 亚洲女人天堂av| 黄色日韩在线| 欧美午夜精品| 久久久伊人欧美| av成人毛片| 你懂的亚洲视频| 午夜精品久久久久久久99水蜜桃| 激情五月综合色婷婷一区二区| 免费久久99精品国产自在现线| 亚洲素人在线| 亚洲第一区在线| 欧美在线观看视频在线| 亚洲乱码久久| 亚洲一区二区免费在线| 亚洲第一页自拍| 亚洲人成欧美中文字幕| 国产精品久久久久久久一区探花| 久久九九有精品国产23| aⅴ色国产欧美| 欧美国产专区| 久久久av水蜜桃| 午夜精品亚洲一区二区三区嫩草| 91久久精品日日躁夜夜躁国产| 国产精品一区二区在线| 欧美日韩精品欧美日韩精品| 久久免费高清| 性8sex亚洲区入口| 一本综合久久| 免费在线欧美视频| 亚洲欧美日韩高清| 一区二区三区中文在线观看| 欧美午夜片在线观看| 久久人人爽国产| 午夜日韩电影| 亚洲特色特黄| 亚洲精品自在久久| 欧美激情片在线观看| 美腿丝袜亚洲色图| 久久九九精品| 欧美有码在线观看视频| 亚洲一区日韩| 亚洲午夜精品在线| 亚洲免费大片| 亚洲美女区一区| 亚洲九九精品| 亚洲精品乱码久久久久久日本蜜臀 | 国产精品一区二区三区久久| 久久理论片午夜琪琪电影网| 中文成人激情娱乐网| 亚洲日本成人网| 亚洲激情精品| 亚洲精品中文字幕有码专区| 亚洲精品久久久久久久久久久久| 欧美黄色影院| 亚洲国产精品精华液网站| 欧美激情一二区| 亚洲国产成人av在线| 亚洲欧洲日韩女同| 欧美一区在线视频| 国产一区欧美日韩| 国产亚洲成av人片在线观看桃| 国产精品h在线观看| 国产精品白丝av嫩草影院| 欧美三级不卡| 国产精品高清在线观看| 国产精品男女猛烈高潮激情 | 午夜欧美大片免费观看| 亚洲一区二区高清| 亚洲男人的天堂在线观看 | 你懂的国产精品| 欧美高清在线观看| 欧美午夜精品理论片a级按摩| 国产精品久久久久久久久久久久久久| 国产精品久久久久久福利一牛影视| 国产精品一区二区久久久久| 国产亚洲人成网站在线观看| 亚洲成人在线免费| 99亚洲精品| 久久成人精品| 亚洲成人在线网站| 一本色道久久综合狠狠躁的推荐| 亚洲综合日韩中文字幕v在线| 性久久久久久久久久久久| 久久九九国产精品怡红院| 欧美电影免费网站| 国产精品久久久久久模特 | 亚洲视频免费在线| 久久av资源网站| 欧美激情性爽国产精品17p| 欧美午夜女人视频在线| 国内精品久久久久伊人av| 亚洲精华国产欧美| 亚久久调教视频| 亚洲国内在线| 羞羞答答国产精品www一本| 欧美成人精品一区二区| 国产精品久久亚洲7777| 在线欧美日韩精品| 亚洲欧美国产高清va在线播| 欧美 日韩 国产一区二区在线视频 | 久久国产福利| 欧美裸体一区二区三区| 国产日韩精品一区二区三区| 91久久线看在观草草青青| 国产亚洲欧美一区二区| 夜夜嗨av一区二区三区四季av| 欧美一区二区三区男人的天堂| 欧美福利视频一区| 亚洲一区二区三区高清| 欧美精品在线免费| 国产一区二区三区四区| 亚洲激情av在线| 欧美在线日韩|