首页 - 网校 - 万题库 - 美好明天 - 直播 - 导航
您现在的位置: 考试吧 > 计算机等级考试 > 计算机二级考试 > C加加 > 复习资料 > 正文

计算机二级C++语言程序设计考试辅导笔记(八)

来源:考试吧 2018-03-26 10:05:12 要考试,上考试吧! 万题库
“计算机二级C++语言程序设计考试辅导笔记(八)”供考生参考。更多计算机等级考试内容请访问考试吧计算机等级考试网。

  四、转换函数的调用

  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;

  }

  五、转换发生的情形

  上面的几个例子都是通过不能类型对象之间的相互赋值来调用转换函数,还有几种调用的可能:

  参数传递

  初始化

  返回值

  表达式语句

  这些情况下,都有可能调用转换函数。

  下面的程序不难理解,就不分析了。

  #include iostream.h

  class CustomDate

  {

  public:

  int da, yr;

  CustomDate() {}

  CustomDate(int d,int y) { 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;

  }

  class Tester

  {

  CustomDate cd;

  public:

  explicit Tester(CustomDate c) { cd=c; }

  void display() { cd.display(); }

  };

  void dispdate(CustomDate cd)

  {

  cd.display();

  }

  CustomDate rtndate()

  {

  Date dt(9,11,1);

  return dt;

  }

  int main()

  {

  Date dt(12,24,3);

  CustomDate cd;

  cd = dt;

  cd.display();

  dispdate(dt);

  Tester ts(dt);

  ts.display();

  cd = rtndate();

  cd.display();

  return 0;

  }

  六、显式构造函数

  注意上面Tester类的构造函数前面有一个explicit修饰符。如果不加上这个关键字,那么在需要把CustomDate对象转换成Tester对象时,编译器会把该函数当作转换构造函数来调用。但是有时候,并不想把这种只有一个参数的构造函数用于转换目的,而仅仅希望用它来显式地初始化对象,此时,就需要在构造函数前加explicit。如果在声明了Tester对象以后使用了下面的语句将导致一个错误:

  ts=jd; //error

  这个错误说明,虽然Tester类中有一个以Date型变量为参数的构造函数,编译器却不会把它看作是从Date到Tester的转换构造函数,因为它的声明中包含了explicit修饰符。

  七、表达式内部的转换

  在表达式内部,如果发现某个类型和需要的不一致,就会发生错误。数字类型的转换是很简单,这里就不举例了。下面的程序是把Date对象转换成长整型值。

  #include iostream.h

  class Date

  {

  int mo, da, yr;

  public:

  Date(int m,int d,int y)

  {

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

  }

  operator long();

  };

  Date::operator long()

  {

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

  long days=yr;

  days*=365;

  days+=(yr-1900)/4; //从1900年1月1日开始计算

  for(int i=0;i days+=da;

  return days;

  }

  int main()

  {

  Date today(12,24,2003);

  const long ott=123;

  long sum=ott+today;

  cout< return 0;

  }

  在表达式中,当需要转换的对象可以转换成某个数字类型,或者表达式调用了作用于某个类的重载运算符时,就会发生隐式转换。运算符重载以后再学习。

扫描/长按二维码帮助考试通关
2018年等考报考资讯
2018等考各科通关技巧
2018各科最新预测试卷
2018等考各科备考资料

微信搜索"考试吧"了解更多考试资讯、下载备考资料

上一页  1 2 3 

  相关推荐:

  2018年全国计算机等级考试必做试题汇总(各科目)

  2018年全国计算机等级考试复习知识点汇总(各科目)

  2018年全国计算机等级考试时间|教材目录(2018年版)

  2018全国计算机等级考试备考经验及应试技巧汇总

  考试内容|考试大纲|2018计算机等级考试科目

  历年真题汇总|考试吧策划:2018年计算机等级考试报考指南

0
收藏该文章
0
收藏该文章
文章搜索
万题库小程序
万题库小程序
·章节视频 ·章节练习
·免费真题 ·模考试题
微信扫码,立即获取!
扫码免费使用
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。
Copyright © 2004- 考试吧计算机等级考试网 出版物经营许可证新出发京批字第直170033号 
京ICP证060677 京ICP备05005269号 中国科学院研究生院权威支持(北京)
在线模拟试题
考证通关杀器
考试最新资讯
一次通关技巧