昨天傍晚在阅读OpenCV的程序时看到代码如下:

inline Mat::Mat() : size(&rows)
{
    initEmpty();
}

第一行中单冒号及其后边的内容我完全不知道是什么意思,前所未见,闻所未闻,于是查阅相关资料并询问了群里边的相关大神,最后得到的答案是冒号后边是“初始化成员列表”,于是自己上网查阅相关内容,最终搞明白了这个初始化成员列表的意思!下面就说说自己的理解!

要想理解初始化成员列表,那么首先你要搞明白构造函数的含义,构造函数说白了就是在新建类的对象时对类进行初始化的函数,它的最大特点是跟类的名称一样。更多构造函数的内容可参考资料(下载链接:百度网盘 请输入提取码 密码:xawx)第69页至70页对构造函数的介绍!

初始化成员就是针对构造函数而言的,构造函数执行时,需要初始化成员数据,有两种方式初始化成员数据。下面分别介绍:

①在构造函数的函数体中,即实现中,初始类的成员数据。例如下面的代码:

class point
{
private:int x,y;
public:point(int m=0,int n=0){x=m;y=n;}int GetX(){return x;}int GetY(){return y;}
};

②在构造函数的定义处以单冒号开始初始化成员列表(Initializer list)来初始化成员数据,比如上面例子中的构造函数 point(int m=0,int n=0)可以重写为:

point(int m=0,int n=0):x(m),y(n)
 {     }

这样咋一看没有什么不同,确实,对于上面的这种简单列子来说,也真的没有太大不同。
那我们为什么要用初始化成员列表,什么时候用初始化成员列表来初始化成员数据呢?Lippman的《C++ Primer》中提到在以下三种情况下需要使用初始化成员列表:
一,需要初始化的数据成员是对象的情况;
二,需要初始化const修饰的类成员;
三,需要初始化引用成员数据;

这里我只关注第一种情况,因为第一种情况就是昨天傍晚阅读代码时遇到的情况。

看下面的一段代码:

class point
{
protected:int m_x,m_y;
public:point(int m=0,int n=0){m_x = m;m_y = n;printf("constructor called!/n");}point(point& p){m_x = p.GetX();m_y = p.GetY();printf("copy constructor called!/n");}int GetX(){return m_x;}int GetY(){return m_y;}
};class point3d
{
private:point m_p;int m_z;
public:point3d(int i,int j, int k):m_p(i,j)   // 相当于 point m_p(i,j)这样对m_p初始化{m_z=k;}void Print(){printf("%d,%d,%d /n",m_p.GetX(),m_p.GetY(),m_z);}
};

在上面的例子中,有两个类,名字分别为 point和point3d,注意在point3d类中,即代码31行定义了一个point的类的对象,名叫m_p, point3d的构造函数名叫 point3d,这个构造函数上有需要初始化的成员i,j,k,这里i,j,k不是以初始化成员列表的形式给出,但是单冒号后边的m_p是一个对象成员,所以必须用列表的形式给出,初始化成员列表实际上就是在构造函数的首行以单冒号开始的部分。

明白了以上我说的之后,再来看我昨天傍晚遇到的代码:

inline Mat::Mat() : size(&rows)
{
    initEmpty();
}
很明显 Mat是Mat类的内联构造函数,它有对象成员需要实始化,以列表的形式给出,这个对象成员名字叫size,需要给的变量是&rows,具体来说这个名叫size的对角成员应该是包含在  initEmpty中的!

好了,关于的构造函数的初始化成员列表的理解分享就说到这里!以后若有新发现再补充在这个帖子中吧!

c++中类的构造函数的初始化成员列表详解相关推荐

  1. JavaScript数据结构与算法——列表详解(上)

    列表是一组有序的数据,每个数组中的数据项称为元素.数组相关知识不够了解的伙伴可以阅读本人上篇博客在JavaScript中,列表的元素可以是任意数据类型.列表中可以保存不定数量的元素,实际使用时元素的数 ...

  2. JavaScript数据结构与算法——列表详解(下),基于Nodejs实现一个列表应用

    1.上篇回顾: 上篇我们实现了一个列表类,并添加了一些属性,实现了比较多的方法,本文章将与大家一起使用列表实现一个图书借阅查询系统.需要使用JavaScript数据结构与算法--列表详解(上)中写好的 ...

  3. 路由器访问控制列表详解

    路由器访问控制列表详解 路由器访问控制列表详解 网络安全保障的第一道关卡 对于许多网管员来说,配置路由器的访问控制列表是一件经常性的工作,可以说,路由器的访问控制列表是网络安全保障的第一道关卡.访问列 ...

  4. Python 列表详解

    Python 列表详解 什么是列表 列表的定义 列表的操作 访问列表元素 列表的切片 列表的相关运算 列表常用方法 更多内容,可以微信搜索[公][众][号][ 郑大钱呀],关注我们,一起学技术! 什么 ...

  5. c++初始化成员列表_C++ 类构造函数初始化列表

    关注我们更多精彩等你发现! 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: 上面的例子中两个构造函数的结果是一样的.上面的构造函数 ...

  6. C++ 初始化列表详解

    目录 1.什么是初始化列表 2.什么时候需要使用初始化列表? 3.初始化列表的效率 4.初始化列表的初始化顺序 1.什么是初始化列表 class A { public:A(int value):m_d ...

  7. c++中的初始化列表详解

    目录: 定义 使用初始化列表的原因 必须使用初始化列表的时候 成员变量的顺序 定义 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号 ...

  8. C++初始化列表详解

    目录:         定义         使用初始化列表的原因         必须使用初始化列表的时候         成员变量的顺序 定义 与其他函数不同,构造函数除了有名字,参数列表和函数体 ...

  9. [转载] Java 语言中的实例初始化块 ( IIB) 详解

    参考链接: Java中的实例初始化块(IIB) 在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB ).不过我觉得介绍的有点简单了,于是,再写一篇文章详 ...

最新文章

  1. SAXParserFactory之求解
  2. python实现高校教务管理系统_python实现教务管理系统
  3. 第 6 章 Distributed File Systems
  4. 如何使用ASP.NET Core Web API实现短链接服务
  5. 一文盘点PaddlePaddle官方九大自然语言处理模型
  6. vue定义对象变量并合并成新的对象
  7. python:threading.Thread类的使用详解
  8. 解决360抢票王刷票0.1秒停顿问题,思考抢票软件和IT行业
  9. 中国科学技术大学计算机考研好考吗,中国科学技术大学计算机考研复习方法谈...
  10. 清空CheckBox 勾选
  11. 山海演武传·黄道·第一卷 雏龙惊蛰 第二章 修闵本饰邪
  12. Nexus 3 Docker仓库(hosted、proxy、group)模式 讲解
  13. 拿森科技完成5亿元C轮融资,打造中国本土线控底盘领导者
  14. numpy 学习汇总18 - 数学运算 (集合,复数)( 基础学习 tcy)
  15. 笔试题-跳格子游戏,Java代码
  16. 单片机 上传服务器协议,单片机数据上传云服务器
  17. 【独家提供】cs1.5版CSOL人物 女性角色模型下载
  18. 分布式 随笔 0-分布式服务架构
  19. MarkDown语法学习教程,2分钟学会速写个人GitHub,轻量化,快捷,迅速,方便.
  20. 常见的文件类型--mime.json

热门文章

  1. python入门基础代码图-Python入门基础学习一
  2. python编程从入门到精通 叶维忠 pdf-最好的Python入门教材是哪本?
  3. python 贴吧自动回复机-python实现微信自动回复机器人
  4. 数据分析 python 用途-python数据统计分析
  5. python科学计算基础教程pdf下载-用Python做科学计算 pdf版
  6. python要在哪里写代码-如何更优雅地写python代码
  7. python语言入门m-Python2 教程
  8. JSR315(JavaTM Servlet 3.0 Specification)
  9. LeetCode Maximal Square(最大子矩阵)
  10. The Report(连接查询)