C++参数初始化表
2015-07-09 14:07
302 查看
通过上一节,我们知道构造函数的主要用途就是初始化对象的,除了采用上节所讲述的那种在函数体中一一赋值的方法外,通过参数初始化表同样可以对对象进行初始化,请看下面的代码(例1):
迅雷会员9号分享
如本例所示,本例在定义带参构造函数book(char *a, double p)时,不再是在函数体中一一赋值进行初始化,其函数体为空。在函数首部与函数体之间增添了一个冒并加上title(a),price(p)语句,这个语句的意思相当于函数体内部的 title = a; price = p; 语句。这样做对于两个成员变量的类来说看不出什么优势,但是一旦当成员变量非常多的时候,通过参数初始化列表进行初始化其优势便可以显现出来了,如此写法简洁明了。
参数初始化表还有一个很重要的作用,那就是为const成员变量初始化。
[例2] 不能在函数体内部初始化 const 变量:
class Array
{
迅雷会员9号分享
public:
Array()
{
length = 0; //compile error
num = NULL;
};
private:
const int length;
int * num;
};
迅雷会员9号分享
在本例中Array类声明了两个成员变量,length和num指针,需要注意的是length加了const关键字修饰。此时默认构造函数再为length赋值为0,这是无法通过编译的。
初始化const成员变量的唯一方法只有利用参数初始化表。
[例3] 通过参数初始化表初始化 const 变量:
如例3所示,利用参数初始化表为const成员变量进行初始化。参数初始化表可以为任何数据成员进行初始化,如下所示,参数初始化表同样可以为num初始化。
class Array
{
内涵段子更新
public:
Array():length(0){num = NULL;}
内涵段子更新
Array(int * a): num(a), length(5){}
private:
const int length;
内涵段子更新
int * num;
};
使用参数初始化表还需要注意的是,参数初始化顺序与初始化表列出表量的顺序无关,参数初始化顺序只与成员变量在类中声明的顺序有关。
迅雷会员9号分享
如本例所示,本例在定义带参构造函数book(char *a, double p)时,不再是在函数体中一一赋值进行初始化,其函数体为空。在函数首部与函数体之间增添了一个冒并加上title(a),price(p)语句,这个语句的意思相当于函数体内部的 title = a; price = p; 语句。这样做对于两个成员变量的类来说看不出什么优势,但是一旦当成员变量非常多的时候,通过参数初始化列表进行初始化其优势便可以显现出来了,如此写法简洁明了。
参数初始化表还有一个很重要的作用,那就是为const成员变量初始化。
[例2] 不能在函数体内部初始化 const 变量:
class Array
{
迅雷会员9号分享
public:
Array()
{
length = 0; //compile error
num = NULL;
};
private:
const int length;
int * num;
};
迅雷会员9号分享
在本例中Array类声明了两个成员变量,length和num指针,需要注意的是length加了const关键字修饰。此时默认构造函数再为length赋值为0,这是无法通过编译的。
初始化const成员变量的唯一方法只有利用参数初始化表。
[例3] 通过参数初始化表初始化 const 变量:
如例3所示,利用参数初始化表为const成员变量进行初始化。参数初始化表可以为任何数据成员进行初始化,如下所示,参数初始化表同样可以为num初始化。
复制纯文本新窗口
class Array
{
内涵段子更新
public:
Array():length(0){num = NULL;}
内涵段子更新
Array(int * a): num(a), length(5){}
private:
const int length;
内涵段子更新
int * num;
};
使用参数初始化表还需要注意的是,参数初始化顺序与初始化表列出表量的顺序无关,参数初始化顺序只与成员变量在类中声明的顺序有关。
相关文章推荐
- 结构体的嵌套
- LeetCode-Number of Digit One-解题报告
- GCC版本切换,-std=c++11问题
- VS2008非托管c++访问webservice服务
- C++知识点随笔(六):模板
- const修饰符 const与指针
- c实现 推箱子游戏
- glOrtho()函数
- c++小游戏代码
- 利用socket直接与adb的pc service通讯
- 把char*转换为wchar_t*
- 明明白白学通C语言(二维码版)
- 明明白白学通C语言(二维码版)
- c语言 交换2个数的值
- Xcode中 #include 搜索顺序
- C++ cin.get() 函数重载
- C++链接ODBC数据源:VS2013,Access
- MinGW安装与环境变量配置和Sublime Text 2搭建C++编译环境
- C语言实现的程序员老黄历实例
- GCC在C语言中内嵌汇编 asm __volatile__