首页 百科知识 ++参数初始化表

++参数初始化表

时间:2022-09-22 百科知识 版权反馈
【摘要】:[例2] 不能在函数体内部初始化 const 变量:在本例中Array类声明了两个成员变量,length和num指针,需要注意的是length加了const关键字修饰。此时默认构造函数再为length赋值为0,这是无法通过编译的。初始化const成员变量的唯一方法只有利用参数初始化表。

通过上一节,我们知道构造函数的主要用途就是初始化对象的,除了采用上节所讲述的那种在函数体中一一赋值的方法外,通过参数初始化表同样可以对对象进行初始化,请看下面的代码(例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成员变量的唯一方法只有利用参数初始化表。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈