前面主要介绍了对象可以通过构造函数初始化,在用户没有手动的去对对象的数据成员进行赋值操作时,系统会主动的通过用户在构造函数中设定的默认值进行数据成员初始化,一般情况下如果用户没有对数据成员初始化,没有显现的定义构造函数,系统会默认的调用空的构造函数,这个构造函数也不具体做什么,也没有参数,不执行初始化操作。
用户希望对于不同的用户赋予不同的初值,可以用带参数的构造函数:我们可以实现在构造函数中添加参数,用户通过在定义对象的同时直接赋予初值,而不必再定义共有函数进行操作。示例代码如下:
#include<iostream>
using namespace std;
class Time
{
public:
Time()
{
hour = 0;
minute = 0;
second = 0;
}
Time(int h,int m,int s);
void display();
private:
int hour;
int minute;
int second;
};
void Time::display()
{
cout << hour << ":" << minute << ":" << second << endl;
}
Time::Time(int h,int m,int s)
{
hour = h;
minute = m;
second = s;
}
int main()
{
Time t1;
t1.display();
Time t2(12,23,43);
t2.display();
return 0;
}
添加了一个带参数的构造函数,待到用户进行对象定义的时候可以在创建对象的时候直接进行初值的创建。
在本程序中对于不带参数的构造函数对数据成员初始化为0,并在类内进行定义,对于带有参数的构造函数在类外进行定义。
现在介绍一种方式用参数初始化表对数据成员进行初始化(在以上程序中进行改动):
#include<iostream>
using namespace std;
class Time
{
public:
Time()
{
hour = 0;
minute = 0;
second = 0;
}
Time(int h,int m,int s):hour(h),minute(m),second(s)
{}
void display();
private:
int hour;
int minute;
int second;
};
void Time::display()
{
cout << hour << ":" << minute << ":" << second << endl;
}
int main()
{
Time t1;
t1.display();
Time t2(12,23,43);
t2.display();
return 0;
}
在带参数的构造函数使用了用参数初始化表的方式对数据成员进行初始化。
一般形式如下:
类名:构造函数名(参数表)[:成员初始化表]
{
【构造函数体】
}
但是如果数据成员是数组的时候,则应当在构造函数的函数体中用语句对其进行赋值,而不能用参数初始化表对其初始化,
需要添加头文件#include<string>
class Student
{
public:
Student(int n,char s,char num[50]):num(n),sex(s)
{
strcpy(name,nam);
}
private:
int num;
char sex;
char name[50];
}