Chinaunix首页 | 论坛 | 博客
  • 博客访问: 425960
  • 博文数量: 116
  • 博客积分: 7087
  • 博客等级: 少将
  • 技术积分: 1175
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-19 23:32
文章分类

全部博文(116)

文章存档

2012年(1)

2011年(2)

2010年(10)

2009年(21)

2008年(18)

2007年(12)

2006年(21)

2005年(31)

我的朋友

分类:

2005-04-14 08:39:11

要使用标准模板库中的容器类,必须注意元素的构造函数写法.

使用标准模板库的容器类时,要注意一点,就是虽然容器类可以存放任何对象,从简单到复杂,但是它对对象的构造函数有一定的要求.

以list容器类为例, 我们创建一个自己的列表.

example:

list h;

这里的cell是个用户定义的类(user defined class).系统看到这一句就会为h分配内存.因为是一个填充cell class的list,所以还会间接调用cell的构造函数.由于一个类的构造函数可能有很多,所以它对cell的构造函数的形式也有一定的要求.一定要如下格式:

cell(const cell &);

list 会自动调用以上形式的构造函数,如果你没有提供 ,那么编译将无法通过.

因为这个构造函数中用到了const,因此要注意,该函数中如果用到其他函数时,其他函数的的返回值也应该是const.

以下给出所有的类,作为参考.需要强调的地方,会用下划线标出.

--------------------------------------------------------------------------

//file:pos.h
#ifndef _MAC_POS
#define _MAC_POS
#include
#include
#include
#include
namespace std {} using namespace std;

class pos
{
 private:
  int x;
  int y;
 public:
  pos();
  pos(int lx, int ly);
  pos(const pos & );
  pos & operator=(const pos &);     
  int getX() const;
  int getY() const;

};

#endif //_MAC_POS

--------------------------------------------------------------------------

//file:pos.cpp
#include
pos::pos():
x(0),y(0)
{
}

pos::pos(int lx,int ly):
x(lx),y(ly)
{
}


pos::pos(const pos & s)
{
 x=s.getX();
 y=s.getY();
 
}

pos & pos::operator= (const pos & s)
{
 x=s.getX();
 y=s.getY();
 return *this;
}

int pos::getX()  const
{
 return x; 
}

int pos::getY() const
{
 return y;
 }
 

--------------------------------------------------------------------------

//file:cell.h
#ifndef _MAC_CELL
#define _MAC_CELL

#include


const int CELL1=0xa9b0; //┌
const int CELL2=0xa9a4; //─
const int CELL3=0xa9d0; //┬
const int CELL4=0xa9b4; //┐
const int CELL5=0xa9a6; //│
const int CELL6=0xa9c0; //├
const int CELL7=0xa9c8; //┤
const int CELL8=0xa9e0; //┼
const int CELL9=0xa9b8; //└
const int CELL10=0xa9d8;//┴
const int CELL11=0xa9bc;//┘

class cell
{
 private:
  pos start;
  int width;
  int height;
  wstring content;
 public:
  cell();
  
  cell(const cell &);  
  cell(int x, int y,int w,int h);
  cell(pos s,int w,int h);
  int getWidth() const;
  int getHeight() const;
  wstring getContent() const;
  pos getPos() const;
  
  ~cell();
  
  
  void setWidth(int w);
  
  void setHeight(int h);
  void setContent(wstring s);
  
};
#endif //_MAC_CELL

--------------------------------------------------------------------------

//file:cell.cpp
#include

cell::cell():
start(0,0),width(0),height(0),content()
{
}

cell::cell(int x,int y,int w,int h):
start(x,y),width(w),height(h),content()
{
}

cell::cell(const cell & c)
{
 width=c.getWidth();
 height=c.getHeight();
 start=c.getPos();
 content=c.getContent();
}

int cell::getWidth() const
{
 return width;
}

int cell::getHeight() const
{
 return height;
 }

wstring cell::getContent() const
{
 return content;
 }

pos  cell::getPos() const
{
 return start;
}

cell::cell(pos s,int w,int h):
start(s),width(w),height(h),content()
{
 
}

void cell::setWidth(int w)
{
 width=w;
 }


void cell::setHeight(int h)
{
 height=h;
 }

void cell::setContent(wstring s)
{
 content=s;
 }

cell::~cell()
{
}

--------------------------------------------------------------------------

//file:row.h
#ifndef _MAC_ROW
#define _MAC_ROW
#include
class row
{
 private:
  list r;  
 public:
  row();
  ~row();
  void insert(cell a);
  void deletec(int pos);
  int  getSize();
};

#endif  //_MAC_ROW

--------------------------------------------------------------------------

//file:row.cpp
#include
row::row()
{
}

row::~row()
{
}

void row::insert(cell a)
{
 r.push_back(a);
}

void row::deletec(int i)
{
 list::iterator p;
 p=r.begin();
 p++;
 r.erase(p);
}

int row::getSize()
{
 return r.size();
}

阅读(1073) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~