8.5.3 构造函数支持重载
前面说,一旦程序员为一个类定义了构造函数,编译器便不会为该类自动生成默认构造函数,因此,如果还想使用无参的构造函数,如“point pt1;”的形式必须在类定义中显式定义一个无参构造函数。这样,构造函数就会出现两个,会不会有问题呢?不会,构造函数支持重载,在创建对象时,会根据传递的具体参数决定采用哪个构造函数。
来看示例代码8.6。
代码8.6 构造函数重载与无参构造函数Constructor2
<———————————————-文件名:point.h——————————————-> 01 #include<iostream> 02 using namespace std; 03 class point//point类定义,在定义的同时实现其成员函数 04 { 05 private://私有成员,分析该代表x轴和y轴坐标 06 int xPos; 07 int yPos; 08 public: 09 point(int x,int y)//有参构造函数 10 { 11 cout<<"有参构造函数的调用"<<endl; 12 xPos=x; 13 yPos=y; 14 } 15 point()//无参构造函数 16 { 17 cout<<"无参构造函数的调用"<<endl; 18 xPos=0; 19 yPos=0; 20 } 21 void print()//输出信息 22 { 23 cout<<"xPos:"<<xPos<<",yPos:"<<yPos<<endl; 24 } 25 }; <———————————-文件名:example806.cpp———————————————-> 26 #include"point.h" 27 int main() 28 { 29 point pt1(3,4);//调用有参构造函数声明point类变量(类对象)pt1 30 pt1. print();//输出pt1的信息 31 point pt2;//调用无参构造函数声明point类变量(类对象)pt2 32 pt2. print();//输出pt2的信息 33 return 0; 34 }
输出结果如下所示。
有参构造函数的调用 xPos:3,yPos:4 无参构造函数的调用 xPos:0,yPos:0
【代码解析】代码8.6在代码8.5的基础上重载了构造函数point()(代码第15行),显式给出了无参构造函数,这样,便可在程序中使用如“point pt2;”的形式声明point的对象pt2。