📄 frame_step05.txt
字号:
//*****************************************************
// Step 5
// Desc: 1) 实现子类的构造函数,不需要考虑是浅拷贝还是
// 深拷贝,因为那是Picture类的事情。
//
//*****************************************************
#ifndef PICTURESH
#define PICTURESH
#include <iostream.h>
class Node;
//------------------------------------------------------
class Picture
{
public:
Picture(char ** array,int wd, int ht);
~Picture();
Picture(const Picture& rhs);
Picture& operator=(const Picture& rhs);
void Display() const;
public:
void Display() const;
int Width() const;
int Height() const;
private:
Node * pt;
};
//-------------------------------------------------------
class Node
{
public:
Node();
virtual ~Node() {}
virtual void Display() const=0;
virtual int Width() const=0;
virtual int Height() const=0;
protected:
static int max(int a,int b) {return a>b?a:b;}
};
//------------------------------------------------------
class DataPic:public Node
{
public:
//modified
DataPic(char ** array,int wd, int ht):w(wd),h(ht)
{
data=new char[w*h];
for (int i=0;i<h;i++)
for (int j=0;j<w;j++)
data[i*w+j]=array[i][j];
}
~DataPic() {delete[] data;}
public:
int Width() const {return w;}
int Height() const {return h;}
private:
DataPic(const DataPic& rhs); //no define
DataPic& operator=(const DataPic& rhs); //no define
private:
int w;
int h;
char * data;
};
//------------------------------------------------------
class FramePic:public Node
{
public:
FramePic(const Picture& rhs):kernel(rhs) {} //modified
~FramePic() {}
int Width() const {return kernel.Width()+2;}
int Height() const {return kernel.Height()+2;}
private:
Picture kernel;
};
//------------------------------------------------------
class HCatPic:public Node
{
public:
HCatPic(const Picture& lpic,const Picture& rpic)
:left(lpic),right(rpic) {} //modified
~HCatPic() {}
int Width() const {return left.Width()+right.Width();}
int Height() const {return max(left.Height(),right.Height());}
private:
Picture left;
Picture right;
};
//------------------------------------------------------
class VCatPic:public Node
{
public:
VCatPic(const Picture& tpic,const Picture& bpic)
:top(tpic),bottom(bpic) {} //modified
~VCatPic() {}
int Width() const {return max(top.Width(),bottom.Width());}
int Height() const {return top.Height()+bottom.Height();}
private:
Picture top;
Picture bottom;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -