龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC++深入详解:构造函数[图](2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
例2-7 #include iostream.h class point { public: int x; int y; point() //point类的构造函数 { x=0; y=0; } void output() { coutxendlyendl; } }; void main() { point pt; pt.output(); } 在程序中,

  例2-7

  #include <iostream.h>
  class point
  {
  public:
     int x;
     int y;
     point()  //point类的构造函数
     {
       x=0;
       y=0;
     }
     void output()
     {
       cout<<x<<endl<<y<<endl;
     }
  };
   
  void main()
  {
     point pt;
     pt.output();
  }

  在程序中,point这个构造函数没有任何返回值。我们在函数内部对x和y变量进行了初始化,按F7编译代码,按Ctrl+F5执行程序,可以看到输出结果是两个0。

  构造函数的作用是对对象本身做初始化工作,也就是给用户提供初始化类中成员变量的一种方式。可以在构造函数中编写代码,对类中的成员变量进行初始化。在例2-7的程序中,当在main函数中执行“point pt”这条语句时,就会自动调用point这个类的构造函数,从而完成对pt对象内部数据成员x和y的初始化工作。

  如果一个类中没有定义任何的构造函数,那么C++编译器在某些情况下会为该类提供一个默认的构造函数,这个默认的构造函数是一个不带参数的构造函数。只要一个类中定义了一个构造函数,不管这个构造函数是否是带参数的构造函数,C++编译器就不再提供默认的构造函数。也就是说,如果为一个类定义了一个带参数的构造函数,还想要无参数的构造函数,则必须自己定义。

  知识点 国内很多介绍C++的图书,对于构造函数的说明,要么是错误的,要么没有真正说清楚构造函数的作用。在网友backer的帮助下,我们参看了ANSI C++的ISO标准,并从汇编的角度试验了几种主流编译器的行为,对于编译器提供默认构造函数的行为得出了下面的结论:

  如果一个类中没有定义任何的构造函数,那么编译器只有在以下三种情况,才会提供默认的构造函数:

  1.如果类有虚拟成员函数或者虚拟继承父类(即有虚拟基类)时;

  2.如果类的基类有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数);

  3.在类中的所有非静态的对象数据成员,它们所属的类中有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数)。

精彩图集

赞助商链接