计算机二级

3773考试网计算机等级考试计算机二级正文

2011年计算机二级C++笔记:类的转换

来源:fjzsksw.com 2010-11-2 11:20:53

 

 二、成员转换函数

  成员转换函数把该类的对象转换为其他数据类型的对象。在成员转换函数的声明中要用到关键字operator。这样声明一个成员转换函数:

  operator aaa();

  在这个例子中,aaa就是要转换成的数据类型的说明符。这里的类型说明符可以是任何合法的C++类型,包括其他的类。如下来定义成员转换函数;

  Classname::operator aaa()

  类名标识符是声明了该函数的类的类型说明符。上面定义的Date类并不能把该类的对象转换回time_t型变量,但可以把它转换成一个长整型值,计算从2000年1月1日到现在的天数。

  #include iostream.h

  class Date

  {

  int mo,da,yr;

  public:

  Date(int m,int d,int y) {mo=m; da=d; yr=y;}

  operator int(); //声明

  };

  Date::operator int() //定义

  {

  static int dys[]={31,28,31,30,31,30,31,31,30,31,30,31};

  int days=yr-2000;

  days*=365;

  days+=(yr-2000)/4;

  for(int i=0;i days+=dys[i];

  days+=da;

  return days;

  }

  int main()

  {

  Date now(12,24,2003);

  int since=now;

  cout< return 0;

  }

  三、类的转换

  上面两个例子都是C++类对象和内部数据对象之间的相互转换。也可以定义转换函数来实现两个类对象之间的相互转换。

  #include iostream.h

  class CustomDate

  {

  public:

  int da, yr;

  CustomDate(int d=0,int y=0) {da=d; yr=y;}

  void display()

  {

  cout< }

  };

  class Date

  {

  int mo, da, yr;

  public:

  Date(int m=0,int d=0,int y=0) {mo=m; da=d; yr=y;}

  Date(const CustomDate&); //转换构造函数

  operator CustomDate(); //成员转换函数

  void display()

  {

  cout< }

  };

  static int dys[] = {31,28,31,30,31,30,31,31,30,31,30,31};

  Date::Date(const CustomDate& jd)

  {

  yr=jd.yr;

  da=jd.da;

  for(mo=0;mo<11;mo++)

  if(da>dys[mo]) da-=dys[mo];

  else break;

  mo++;

  }

  Date::operator CustomDate()

  {

  CustomDate cd(0,yr);

  for(int i=0;i cd.da+=da;

  return cd;

  }

  int main()

  {

  Date dt(12,24,3);

  CustomDate cd;

  cd = dt; //调用成员转换函数

  cd.display();

  dt = cd; //调用转换构造函数

  dt.display();

  return 0;

  }

  这个例子中有两个类CustomDate和Date,CustomDate型日期包含年份和天数。

  这个例子没有考虑闰年情况。但是在实际构造一个类时,应该考虑到所有问题的可能性。

  在Date里中具有两种转换函数,这样,当需要从Date型变为CustomDate型十,可以调用成员转换函数;反之可以调用转换构造函数。

  不能既在Date类中定义成员转换函数,又在CustomDate类里定义转换构造函数。那样编译器在进行转换时就不知道该调用哪一个函数,从而出错。

 

上一页  [1] [2] [3] [4] 下一页

触屏版 电脑版
3773考试网 琼ICP备12003406号-1