8.5.2 构造函数可以有参数

    编译器自动生成的默认构造函数是无参的,实际上,构造函数可以接收参数,在对象创建时提供更大的自由度,如代码8.5所示。

    代码8.5 有参构造函数Constructor1


    <———————————————文件名: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 void print()//输出信息 16 { 17 cout<<"xPos:"<<xPos<<",yPos:"<<yPos<<endl; 18 } 19 }; <—————————————-文件名:example805.cpp—————————————-> 20 #include"point.h" 21 int main() 22 { 23 point pt1(3,4);//调用有参构造函数声明point类变量(类对象)pt1 24 pt1. print();//输出pt1的信息 25 return 0; 26 }

    输出结果如下所示。


    对象创建时构造函数被自动调用 xPos:3,yPos:4

    【代码解析】代码第9行显式定义了构造函数“point(int x,int y)”,这样,编译器便不会自动生成默认构造函数,这时,必须使用如“point pt1(3,4);”创建point类的对象pt1,并对其中的数据成员xPos和yPos进行初始化,如果仍采用“point pt1;”的形式,编译器会报错,提示信息如下所示。


    error C2512:'point':no appropriate default constructor available