参考: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. };

使用参数初始化表还需要注意的是,参数初始化顺序与初始化表列出表量的顺序无关,参数初始化顺序只与成员变量在类中声明的顺序有关。

 

2.8 C++参数初始化表的更多相关文章

  1. C++学习8 构造函数的参数初始化表

    构造函数是一种特殊的成员函数,在创建对象时自动执行,主要用来进行初始化工作,例如对 private 属性的成员变量赋值. 对成员变量的初始化,除了在构造函数的函数体中一一赋值,还可以采用参数初始化表. ...

  2. jQuery form插件的使用--用 formData 参数校验表单,验证后提交(简单验证).

    Form Plugin API 里提供了很多有用的方法可以让你轻松的处理表单里的数据和表单的提交过程. 测试环境:部署到Tomcat中的web项目. 一.引入依赖js <script src=& ...

  3. django的FormView中,自定义初始化表单数据的曲折方法

    这个技巧,主要是用于表单初始化及回显. 也就是说,如果用户的数据库里有数据,则要将相应的数据显示在表单里, 如果用户的数据库里没有数据,才会生成一个空白的表单给用户, 这样才显得专业塞! 而我面对的尴 ...

  4. 构造函数和初始化表、this指针与常函数、析构函数、拷贝构造与拷贝赋值(day05)

    十四 构造函数和初始化表 ... 初始化表 )语法形式 class 类名{ 类名(形参表):成员变量1(初值),...{} }; )必须要使用初始化表的场景 -->如果有类 类型的成员变量,而该 ...

  5. 类的定义与实例化、构造函数和初始化表(day04)

    十三 类的定义与实例化 类的一般形式 class/struct 类名:继承表{ 访问控制限定符: 类名(形参表):初始化表{}//构造函数 ~类名(void){}//析构函数 返回类型 函数名(形参表 ...

  6. Golang里实现Http服务器并解析header参数和表单参数

    在http服务里,header参数和表单参数是经常使用到的,本文主要是练习在Go语言里,如何解析Http请求的header里的参数和表单参数,具体代码如下: package server import ...

  7. LEDAPS1.3.0版本移植到windows平台----HuPm参数初始化模块

    这个是2012年左右放在百度空间的,谁知百度空间关闭...转移到博客园. 最近项目用到3.1.2版本的LEDAPS,新版本的使用情况会在后续文章中慢慢丰富. LEDAPS的调用顺序是:HuPm--&g ...

  8. 【转载】 pytorch自定义网络结构不进行参数初始化会怎样?

    原文地址: https://blog.csdn.net/u011668104/article/details/81670544 ------------------------------------ ...

  9. 未能使用“Csc”任务的输入参数初始化该任务

    今天.NetCore2.1版本,建立Asp.net Core web应用程序项目时,报以下错误: 未能使用“Csc”任务的输入参数初始化该任务. “Csc”任务不支持“SharedCompilatio ...

随机推荐

  1. ROC曲线(receiver-operating-characteristic curve)-阈值评价标准(转)

    转自:http://blog.csdn.net/abcjennifer/article/details/7359370 ROC曲线指受试者工作特征曲线 / 接收器操作特性曲线(receiver ope ...

  2. ssh repo ----> struts+hibernate+spring( jar包和源码)各版本下载链接

    struts http://archive.apache.org/dist/struts/ hibernate http://hibernate.org/orm/releases/5.0/ sprin ...

  3. Lab 3-2

    Analyze the malware found in the file Lab03-02.dll using basic dynamic analysis tools. Questions and ...

  4. apiCloud 三方分享,微信好友分享,微信朋友圈分享,QQ分享,微博分享

    首先查看我的这篇有关三方登录的博客,地址是http://www.cnblogs.com/gqx-html/p/8303567.html,配置完三方数据后可以从上一篇文章中的链接跳转到各个登录查看api ...

  5. ubuntu下常用命令

    目录 一.查找命令 二.打开相应文件 三.查看系统资源占用 四.Ubantu解压文件 五.虚拟机ubuntu server 14.0 根目录扩容 七.ubuntu 关机,重启,注销命令 1 关机命令 ...

  6. 23. Merge K Sorted Lists (Java, 归并排序的思路)

    题目:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...

  7. 20165309 实验三 敏捷开发与XP实践

    2017-2018-2 20165309实验三<Java面向对象程序设计>实验报告 一.实验内容 1. XP基础 2. XP核心实践 3. 相关工具 二.实验步骤 (一)代码规范 1.在I ...

  8. 使用scp上传和下载文件

    利用scp传输文件 1.从服务器下载文件 scp username@servername:/path/filename /tmp/local_destination 例如scp codinglog@1 ...

  9. 根据userAgent判断打开网页的所在终端,以及浏览器

    function _IsIOS() { var ua = navigator.userAgent.toLowerCase(); if(ua.match(/iPhone\sOS/i) == " ...

  10. leetcode-algorithms-6 ZigZag Conversion

    leetcode-algorithms-6 ZigZag Conversion The string "PAYPALISHIRING" is written in a zigzag ...