• 2.8 C++参数初始化表


    参考:http://www.weixueyuan.net/view/6340.html

    总结:

      参数初始化表可以为任何数据成员进行初始化。

      初始化const成员变量的唯一方法只有利用参数初始化表。

    通过上一节,我们知道构造函数的主要用途就是初始化对象的,除了采用上节所讲述的那种在函数体中一一赋值的方法外,通过参数初始化表同样可以对对象进行初始化,请看下面的代码(例1):
    1. class book
    2. {
    3. public:
    4. book(){}
    5. book(char* a, double p);
    6. void setprice(double a);
    7. double getprice();
    8. void settitle(char* a);
    9. char * gettitle();
    10. void display();
    11. private:
    12. double price;
    13. char * title;
    14. };
    15. 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 变量:
    1. class Array
    2. {
    3. public:
    4. Array()
    5. {
    6. length = 0; //compile error
    7. num = NULL;
    8. };
    9. private:
    10. const int length;
    11. int * num;
    12. };
    在本例中Array类声明了两个成员变量,length和num指针,需要注意的是length加了const关键字修饰。此时默认构造函数再为length赋值为0,这是无法通过编译的。

    初始化const成员变量的唯一方法只有利用参数初始化表。

    [例3] 通过参数初始化表初始化 const 变量:
    1. class Array
    2. {
    3. public:
    4. Array(): length(0)
    5. {
    6. num = NULL;
    7. };
    8. private:
    9. const int length;
    10. int * num;
    11. };
    如例3所示,利用参数初始化表为const成员变量进行初始化。参数初始化表可以为任何数据成员进行初始化,如下所示,参数初始化表同样可以为num初始化。
    1. class Array
    2. {
    3. public:
    4. Array():length(0){num = NULL;}
    5. Array(int * a): num(a), length(5){}
    6. private:
    7. const int length;
    8. int * num;
    9. };
    使用参数初始化表还需要注意的是,参数初始化顺序与初始化表列出表量的顺序无关,参数初始化顺序只与成员变量在类中声明的顺序有关。
     
  • 相关阅读:
    文件处理seek以及修改内容的两种方式
    三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
    MySQL逻辑查询语句执行顺序
    函数基础
    迭代器、生成器、面向过程编程
    3 函数
    文件处理
    字符编码
    2 数据类型、字符编码、文件处理
    转载文章之提供给开发者 10 款最好的 Python IDE
  • 原文地址:https://www.cnblogs.com/yongpan/p/7457233.html
Copyright © 2020-2023  润新知