通过上一节,我们知道构造函数的主要用途就是初始化对象的,除了采用上节所讲述的那种在函数体中一一赋值的方法外,通过参数初始化表同样可以对对象进行初始化,请看下面的代码(例1):
class book
{
public:
book(){}
book(char* a, double p);
void setprice(double a);
double getprice();
void settitle(char* a);
char * gettitle();
void display();
private:
double price;
char * title;
};
book::book(char *a, double p):title(a),price(p){}
如本例所示,本例在定义带参构造函数book(char *a, double p)时,不再是在函数体中一一赋值进行初始化,其函数体为空。在函数首部与函数体之间增添了一个冒并加上title(a),price(p)语句,这个语句的意思相当于函数体内部的 title = a; price = p; 语句。这样做对于两个成员变量的类来说看不出什么优势,但是一旦当成员变量非常多的时候,通过参数初始化列表进行初始化其优势便可以显现出来了,如此写法简洁明了。
参数初始化表还有一个很重要的作用,那就是为const成员变量初始化。
[例2] 不能在函数体内部初始化 const 变量:
class Array
{
public:
Array()
{
length = 0; //compile error
num = NULL;
};
private:
const int length;
int * num;
};
在本例中Array类声明了两个成员变量,length和num指针,需要注意的是length加了const关键字修饰。此时默认构造函数再为length赋值为0,这是无法通过编译的。
初始化const成员变量的唯一方法只有利用参数初始化表。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。