类的构造函数主要有3种定义形式.
(1)默认构造函数的格式如下:
类名()
这里的类名就是函数名.例如,一下代码定义了张户类的默认构造函数:
Account(){ //无返回类型,无参数(内联函数的形式) ID=0; //默认ID strcpy(Name,""); //默认账户名 balance=0.0; //默认余额 }
(2)带参数的构造函数的格式如下:
类名(形式参数表)
同样,这里的类名也是函数名.例如,一下代码定义了账户类的带参构造函数:
Account(int ID,char Name[],float balance){ this->ID=ID; strcpy(this->Name,Name); this->balance=balance; }
(3)拷贝构造函数的格式如下:
类名(类名&c
Account(Account &other){ ID=other.ID; strcpy(Name,other.Name); balance=other.balance;}
所谓拷贝构造函数,顾名思义,就是创建一个现有对象的副本.为什么这里用引用形式?
如果改为这样Account(Account other){...}
,在创建账户对象my时传入一个对象他.这是构造函数需要首先创建函数内的局部变量other,other首先得到t1的值,只有other创建成功菜能执行函数体中的赋值操作.那么创建other需要什么呢?一定会调用Account的构造函数,而且一定是拷贝够着函数,因为other是要成为t1的副本,这是不会调用默认构造函数.于是在创建other对象的拷贝构造函数中,相同的一幕发生了,需要首先创建另一个耶称为other的局部对象....,于是陷入死循环.二引用传递就不会发生这种情况,因为引用只是链接到外部对象,不会创建新对象.
无论用户自定义的构造函数还是默认构造函数都有以下特点:
(1)在对象被创建是执行,执行一下
(2)构造函数的函数名与类名相同
(3)没有返回值类型,也没有返回值
(4)构造函数不能像普通函数那样被显示调用