类的构造函数的定义

类的构造函数主要有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)构造函数不能像普通函数那样被显示调用

posted on 2018-03-03 09:36  laplus  阅读(2911)  评论(0编辑  收藏  举报

导航