加入收藏 收藏网站 设为首页 设为首页
招生考试网
学历类| 阳光高考 研 究 生 自学考试 成人高考 专 升 本 中考会考 外语类| 四 六 级 职称英语 商务英语 公共英语 日语能力
资格类| 公 务 员 报 关 员 银行从业 司法考试 导 游 证 教师资格 财会类| 会 计 证 经 济 师 会计职称 注册会计 税 务 师
工程类| 一级建造 二级建造 造 价 师 造 价 员 咨 询 师 监 理 师 医学类| 卫生资格 执业医师 执业药师 执业护士 国际护士
计算机| 等级考试 软件水平 应用能力 其它类| 书画等级 美国高考 驾 驶 员 书法等级 少儿英语 报 检 员 单 证 员 出国留学
 招生考试网 - 计算机等级考试 - 考试辅导 - 计算机二级 - 正文

 
2011年计算机二级C++笔记:类的转换
来源:fjzsksw.com 2010-11-2 编辑:zhanghaifeng 【字体:小 大】
C++的内部数据类型遵循隐式类型转换规则。假设某个表达市中使用了一个短整型变量,而编译器根据上下文认为这儿需要是的长整型,则编译器就会根据类型转换规则自动把它转换成长整型,这种隐式转换出现在赋值、参数传递、返回值、初始化和表达式中。我们也可以为类提供相应的转换规则。

 

 二、成员转换函数

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

 



 
网站版权与免责声明
①由于各方面情况的不断调整与变化,本网所提供的相关信息请以权威部门公布的正式信息为准.
②本网转载的文/图等稿件出于非商业性目的,如转载稿涉及版权等问题,请在两周内来电联系.
推荐文章
  • 此栏目下没有推荐文章
  • 热门文章

    报名考试
    全国 | 黑龙江 | 吉林 | 辽宁 | 内蒙古
    青海 | 宁夏 | 甘肃 | 新疆 | 陕西
    西藏 | 北京 | 天津 | 河北 | 山东
    江苏 | 安徽 | 河南 | 上海 | 浙江
    福建 | 广东 | 山西 | 湖南 | 湖北
    江西 | 广西 | 海南 | 云南 | 贵州
    四川 | 重庆
    分省高校计算机考试
    黑龙江 | 吉林 | 辽宁 | 内蒙古 | 河北
    北京 | 天津 | 新疆 | 甘肃 | 宁夏
    青海 | 陕西 | 山西 | 河南 | 山东
    江苏 | 安徽 | 浙江 | 福建 | 广东
    海南 | 广西 | 江西 | 湖北 | 湖南
    四川 | 上海 | 重庆 | 贵州 | 云南
    西藏
    成绩查询
    报考指南
    试题答案
    模拟试题
    考试辅导
    计算机一级 | 计算机二级 | 计算机三级 | 计算机四级
    经验交流
    高校计算机