C 默默编写并调用哪些函数计算机二级考试

文章作者 100test 发表时间 2009:06:15 10:08:23
来源 100Test.Com百考试题网


  编辑特别推荐:

  全国计算机等级考试(等考)指定教材

  全国计算机等级考试学习视频

  全国计算机等级考试网上辅导招生

  全国计算机等级考试时间及科目预告

  百考试题教育全国计算机等级考试在线测试平台

  全国计算机等级考试资料下载

  全国计算机等级考试论坛

  计算机等级考试四级应用题解析汇总

  2009年下半年全国计算机二级考试报名时间从6月1日起已经开始报名。详情点击:2009年下半年全国计算机等级考试各地报名点汇总。2009年下半年全国计算机二级考试时间是2009年9月19日至23日。更多优质资料尽在百考试题论坛 百考试题在线题库

  内容:
  有人提出了一个问题:如果我写了一个空类,里面什么都没有,什么功能都没有实现,这样的类合法么?我能用它么?比如:
  class Null{}.
  也许你也有相同的问题,而我的答案是----->.当然合法,你完全可以像一般类一样用它.提出这个问题的人把我们今天讨论的话题给引导出来了:编译器到底默默地对我们自己写的类做了些什么,进行了哪些"暗箱操作"?
  当你写了个新类时,你有可能忘记写它的构造函数、析构函数、拷贝构造、赋值函数,会不会编译不过?Don’t worry! 编译器会为你提供这些函数的默认实现的.比如上面的Null类,编译器会自动将它转换为如下等价代码:
  class Null{
  public:
  Null(){...}
  ~Null(){...}
  Null(const Null&. newNull){...}
  Null&. operator = (const Null&. newNull){...}
  }.
  对于编译器默认构造函数,很多情况下它不会自动为你初始化内置型变量的值,这点很可怕,常常会导致一些莫名其妙的情况甚至是系统无迹象地崩溃,最好的做法还是老老实实的显式提供构造函数为上上之策,呵呵,对于一些非内置型变量你就必须提供它的默认构造函数,否则编译不过.
  提供的默认析构函数都是non-virtual,除非这个class的基类的析构函数为virtual类型的.拷贝构造函数(copy constructor)其实和一般的构造函数具有相似的功能只不过它的参数是另一个该类的引用对象,它的初始化过程通过调用成员变量的copy constructor并传递右操作数(那个对象参数)的成员变量值来完成初始化过程的.我们来看下面这个例子,这里我写了个类BookEntry:
  class BookEntry{
  public:
  BookEntry(string&. title,double price,string&. author)
  :title_(title),price_(price),author_(author){
  }
  ...
  private:
  string title_,author_.
  double price_.
  }.
  //test.cpp
  BookEntry firstBook("Effective C ",65.0,"Scott Meyers").
  BookEntry secondBook(firstBook). //copy constructor
  BookEntry thirdBook=secondBook. //notice: here call copy constructor too.
  到这里生成的三个对象保持了相同的数据拷贝,这里我们注意一下最后一条语句调用的是copy constructor还是对它进行assign操作符运算,这里不要认为是调用了assign操作符,因为编译器优化的结果,编译器不需要先初始化以后再调用assign来完成一个新对象的构造过程,它可以直接调用copy构造函数直接完成,如果连这点都不能做到的话,那你这款这编译器也够糟糕的了!呵呵.

相关文章


这是在调试程序时发现的,gcc中使用scanf的一个小陷阱计算机二级考试
C 默默编写并调用哪些函数计算机二级考试
errorLNK2005:……alreadydefinedin计算机二级考试
计算机二级C 技巧:C 鼠标全局钩子实现代码计算机二级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛