VC++深入详解:构造函数[图](2)
例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.在类中的所有非静态的对象数据成员,它们所属的类中有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数)。
- 上一篇:VC++数据库通用模块开发:数据显示[组图]
- 下一篇:VC++深入详解:函数的重载