一、构造函数
1、构造函数的作用
在对象被创建时使用特定的值构造对象,即把对象初始化为一个特定的状态。
2、构造函数是一种特殊的成员函数,
它不需用户调用,而是在对象创建时由系统自动调用。
3、如果程序中未声明,则系统自动产生一个默认形式的构造函数,用于创建对象,
4、默认构造函数形式:
类名::类名(){}
默认构造函数是一个空函数
允许内联、重载、默认形参值函数
- 函数名与类名相同
- 没有返回值
- 声明为共有函数
例
#include <iostream>
using namespace std;
class Date {
public:
Date(); // 无参构造函数
void setDate(int y,int m,int d);
void showDate();
private:
int year, month, day; };
Date::Date() // 构造函数的实现
{ year=0; month=0; day=0; }
函数重载
Date(); // 无参构造函数1
Date(int y,int m,int d);
默认形参值
Date(int y=0,int m=0,int d=0)
{ year=y; month=m; day=d; }
注意
- 一个类可定义多个函数
- 可用重载
- 对每一个对象来说,建立对象值、只执行其中一个构造函数
利用构造函数创建对象
1、一般形式
类名 对象名[(实参表)];
- 类名与构造函数名相同
- 实参表提供实际参数
2、通过指针和new运算符动态建立对象
类名*指针变量=new类名[(实参表)];
例如:
Date*d1=new Date(1998,4,28);
d1->setdate(2020,3,10);
Box*pt;
pt=new Box;
pt=new Box(12,13,14);
delete pt;
void main()
{
Date *date1;
date1=new Date(1998,4,28);
// 以上两条语句可合写成:
// Date *date1=new Date(1998,4,28);
cout<<"Date1 output1:"<<endl;
date1->showDate();
date1->setDate(2002,11,14);
cout<<"Date1 output2:"<<endl;
date1->showDate();
delete date1; }
构造函数初始化
1.使用函数体
class Date
{
int d, m, y;
public:
Date(int dd, int mm, int yy) {
d=dd;
m=mm;
y=yy; }
Date(int dd, int mm)
{
d=dd;
m=mm;
} }
2、使用初始化列表
格式:
funname(参数列表):初始化列表
{ 函数体,可以为空}
形式:
成员名1(形参名1),成员名2(形参名2),成员名n(形参名n)
在这里插入代class Date
{
int d, m, y;
public:
Date(int dd, int mm, int yy) :d(dd),m(mm),y(yy)
{ }
Date(int dd, int mm) : d(dd),m(mm)
{ }
};码片
注意
必须使用初始化的情况:
- 数据成员为常量
- 数据成员为引用类型
- 数据成员为无参构造函数的类的对象