求学快递网是国内领先的B2M2C教育培训网上信息平台!

首页 | 分站加盟 | 课程发布 | 最新课程 | 最新机构 | 培训专题 | 全国分站 | 帮助中心

计算机等级考试_计算机等级考试报名_计算机考试成绩查询_求学快递网

计算机等级考试一步到位
您的位置:求学快递网 > 计算机等级考试 > 考试辅导 > 计算机二级 > 2016年计算机二级《C++》复习资料:类的转换 - 正文内容

2016年计算机二级《C++》复习资料:类的转换

 

 

求学快递网计算机等级考试专题重点推荐:2016年计算机级考试报考时间 2016年计算机二级考试证书领取时间2016年计算机二级考试报考指南2016年计算机二级考试大纲2016年计算机二级考试政策2016年计算机二级考试报考条件2016年计算机二级考试科目等最新新闻资讯。

  类的转换

  C++的内部数据类型遵循隐式类型转换规则。假设某个表达市中使用了一个短整型变量,而编译器根据上下文认为这儿需要是的长整型,则编译器就会根据类型转换规则自动把它转换成长整型,这种隐式转换出现在赋值、参数传递、返回值、初始化和表达式中。我们也可以为类提供相应的转换规则。

  对一个类建立隐式转换规则需要构造一个转换函数,该函数作为类的成员,可以把该类的对象和其他数据类型的对象进行相互转换。声明了转换函数,就告诉了编译器,当根据句法判定需要类型转换时,就调用函数。

  有两种转换函数。一种是转换构造函数;另一种是成员转换函数。需要采用哪种转换函数取决于转换的方向。

  一、转换构造函数

  当一个构造函数仅有一个参数,且该参数是不同于该类的一个数据类型,这样的构造函数就叫转换构造函数。转换构造函数把别的数据类型的对象转换为该类的一个对象。和其他构造函数一样,如果声明类的对象的初始化表同转换构造函数的参数表相匹配,该函数就会被调用。当在需要使用该类的地方使用了别的数据类型,便宜器就会调用转换构造函数进行转换。

  #include iostream.h

  #include time.h

  #include stdio.h

  class Date

  {

  int mo, da, yr;

  public:

  Date(time_t);

  void display();

  };

  void Date::display()

  {

  char year[5];

  if(yr<10)

  sprintf(year,0%d,yr);

  else

  sprintf(year,%d,yr);

  cout< }

  Date::Date(time_t now)

  {

  tm* tim=localtime(&now);

  da=tim->tm_mday;

  mo=tim->tm_mon+1;

  yr=tim->tm_year;

  if(yr>=100) yr-=100;

  }

  int main()

  {

  time_t now=time(0);

  Date dt(now);

  dt.display();

  return 0;

  }

  本程序先调用time()函数来获取当前时间,并把它赋给time_t对象;然后程序通过调用Date类的转换构造函数来创建一个Date对象,该对象由time_t对象转换而来。time_t对象先传递给localtime()函数,然后返回一个指向tm结构(time.h文件中声明)的指针,然后构造函数把结构中的日月年的数值拷贝给Date对象的数据成员,这就完成了从time_t对象到Date对象的转换。

 

 

关注求学快递网计算机等级考试专题,帮你了解最新的2016年计算机二级考试资讯服务2016计算机级考试成绩查询,让你轻松备考计算机等级考试!

  二、成员转换函数

  成员转换函数把该类的对象转换为其他数据类型的对象。在成员转换函数的声明中要用到关键字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类里定义转换构造函数。那样编译器在进行转换时就不知道该调用哪一个函数,从而出错.

  四、转换函数的调用

  C++里调用转换函数有三种形式:第一种是隐式转换,例如编译器需要一个Date对象,而程序提供的是CustomDate对象,编译器会自动调用合适的转换函数。另外两种都是需要在程序代码中明确给出的显式转换。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,int d,int y)

  {

  mo=m; da=d; yr=y;

  }

  operator CustomDate();

  };

  Date::operator CustomDate()

  {

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

  CustomDate cd(0,yr);

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

  return cd;

  }

  int main()

  {

  Date dt(11,17,89);

  CustomDate cd;

  cd = dt;

  cd.display();

  cd = (CustomDate) dt;

  cd.display();

  cd = CustomDate(dt);

  cd.display();

  return 0;

  }

求学快递网计算机等级考试专题的小编们根据网民搜索喜爱,第一时间公布2016年计算机二级模拟试题2016年计算机二级考试应试技巧计算机二级考试历年真题2016年计算机二级考试章节复习供广大求学爱好者学习使用,欢迎继续关注求学快递网计算机等级考试专题,并给我们提供宝贵的意见!

 

相关推荐

计算机等级考试最新机试技巧
计算机等级考试高效利用技巧

最新计算机资讯

热点专题

计算机等级考试经验技巧分享

关于本站  诚征英才  广告服务  招生服务  免责声明  分站加盟  VIP会员  联系我们  网站地图  网站记事

版权所有 CopyRight 2008-2017 粤ICP备14009694号 www.studyems.com, Inc. All Rights Reserved
违法和不良信息举报邮箱:2881796407@qq.com 举报电话: