C++参数初始化表
通过上一节,我们知道构造函数的主要用途就是初始化对象的,除了采用上节所讲述的那种在函数体中一一赋值的方法外,通过参数初始化表同样可以对对象进行初始化,请看下面的代码(例 1):
对于两个成员变量的类来说,参数初始化表看不出什么优势,但是一旦当成员变量非常多的时候,通过参数初始化表进行初始化的优势就显现出来了,如此写法简洁明了。
参数初始化表还有一个很重要的作用,那就是为 const 成员变量初始化。
【例 2】不能在函数体内部初始化 const 变量:
初始化 const 成员变量的唯一方法只有利用参数初始化表。
【例 3】通过参数初始化表初始化 const 变量:
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
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 成员变量的唯一方法只有利用参数初始化表。
【例 3】通过参数初始化表初始化 const 变量:
class Array { public: Array(): length(0) { num = NULL; }; private: const int length; int * num; };如例 3 所示,利用参数初始化表为 const 成员变量进行初始化。参数初始化表可以为任何数据成员进行初始化,如下所示,参数初始化表同样可以为 num 初始化。
class Array { public: Array():length(0){num = NULL;} Array(int * a): num(a), length(5){} private: const int length; int * num; };使用参数初始化表还需要注意的是,参数初始化顺序与初始化表列出表量的顺序无关,参数初始化顺序只与成员变量在类中声明的顺序有关。
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。