lt;转载自刘佳ID:freedom0203和waretgt; C++中成员初始化列表的使用
刘佳:
C++在类的构造函数中,可以两种方式初始化成员数据(data member)。
{
private:
int x,y;
public:
point(int m=0,int n=0)
{
x=m;
y=n;
}
{
return x;
}
int GetY()
{
return y;
}
};
{
}
{
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;
}
};
{
private:
point m_p;
int m_z;
public:
point3d(point p, int k)
{
m_p = p; //这里是对m_p的赋值
m_z=k;
}
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 p(1,2); //先定义一个2D坐标
}
从point3d实现体可以看出,我们是通过对m_p进行赋值,这样不仅调用copy constructor产生临时对象而且是对m_p的一个赋值操作。
{
point p(1,2);
}
{
private:
const int a;
int& b;
// base(int m, int n)
// {
// a = m;
// b = n;
// }
{}
};
{
base ba(1,2);
}
---------------------------
构造函数初始化列表
作者:waret 和java相关
简介:这是构造函数初始化列表的详细页面,介绍了和java,JavaEye 构造函数初始化列表有关的知识、技巧、经验,和一些java源码等。
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如:
Example::Example() : ival(0), dval(0.0)
{
//ival 和dval是类的两个数据成员
}
上面的例子和下面不用初始化列表的构造函数看似没什么区别:
Example::Example()
{
ival = 0;
dval = 0.0;
}
二者的区别在于:上面的构造函数(使用初始化列表的构造函数)显示的初始化类的成员;而没使用初始化列表的构造函数是对类的成员赋值,并没有进行显示的初始化。但有时必须用带有初始化列表的构造函数:
(1)成员类型是没有默认构造函数的类。若没有提供显示初始化式,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。
(2)const成员或引用类型的成员。因为const对象或引用类型只能初始化,不能对他们赋值。
(3)在继承里面,只有初始化列表可以构造父类的private成员。
因为类类型的数据成员对象在进入函数体前已经构造完成,也就是说在成员初始化列表处进行构造对象的工作,调用构造函数,在进入函数体之后,进行的是对已经构造好的类对象的赋值,又调用个拷贝赋值操作符才能完成(如果并未提供,则使用编译器提供的默认按成员赋值行为)
初始化列表的成员初始化顺序: C++初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。
class CMyClass
{
CMyClass(int x, int y);
int m_x; int m_y;
};
CMyClass::CMyClass(int x, int y) : m_y(y), m_x(m_y) { }
编译器先初始化m_x,然后是m_y,因为它们是按这样的顺序声明的。结果是m_x将有一个不可预测的值。有两种方法避免它,一个是总是按照你希望它们被初始化的顺序声明成员,第二个是,如果你决定使用初始化列表,总是按照它们声明的顺序罗列这些成员。这将有助于消除混淆。
转载于:https://www.cnblogs.com/wbb2109/archive/2011/04/29/2263695.html
lt;转载自刘佳ID:freedom0203和waretgt; C++中成员初始化列表的使用相关推荐
- B表中的pid对应A表中id,查询A表中数据,根据b表中对应a表中该id的数据数目排序...
B表中的pid对应A表中id,查询A表中数据,根据b表中对应a表中该id的数据数目排序 select a.*,count(*) as c from a left join b on a.id=b.ai ...
- 【MOS】中文文档列表 - Oracle Database (文档 ID 1533057.1)
中文文档列表 - Oracle Database (文档 ID 1533057.1) 类型: 状态: 上次主更新: 上次更新: ANNOUNCEMENT PUBLISHED 2017-2-23 201 ...
- 【转载】c#类的成员初始化顺序
作者:彭白洋 创建于:2009-01-15 出处:http://www.cnblogs.com/siceblue/archive/2009/01/15/1376430.html 收录于:2013-0 ...
- 通过ID在JavaScript对象数组中查找对象
本文翻译自:Find object by id in an array of JavaScript objects I've got an array: 我有一个数组: myArray = [{'id ...
- 企业微信怎么输入服务器id,系统账号绑定企业微信成员id
原标题:系统账号绑定企业微信成员id 场景 在白码系统中需要使用各种接口对接企业微信时,发现需要使用企业微信的成员id,比如创建日程.获取打卡数据等接口,所以在此之前需要先将成员id与白码系统中的用户 ...
- 为什么要把id存到redis的key中_干货|mysql:exists还是in?哪个性能好?为什么?
作者:wanber 链接:https://blog.nowcoder.net/n/fc944cca2eeb410a876f742f6d48662d 来源:牛客网 在项目中经常会用到in和exists, ...
- App ID申请(将项目中的ID向苹果申请)
最近公司移动端大佬离职了,我一个做Java的接手了移动端任务,小白很无奈啊,百度了iOS开发相关知识,下面引用大神的文章做一篇笔记,原文地址是:https://www.jianshu.com/p/e ...
- ensembl数据库BioMart使用,查找转录本ID在ensembl与refseq中的对应关系
如何查找 转录本ID在ensembl与refseq中的对应关系 Ensembl数据库地址: http://grch37.ensembl.org/index.html 进入BioMart 选择DataS ...
- python中id函数的用法_Python中的id()函数
在本文中,我们将学习id()Python 3.x中函数的用法和实现.或更早.它存在于Python标准库中,在执行代码之前会自动导入. 语法:id() 返回值:类型的标识值 该函数正好接受一个参数,即必 ...
最新文章
- [转]xml解析工具的效率比较QDomDocument、TinyXml-2、RapidXml、PugiXml
- 视频监控成AI芯片主战场,海康威视和大华股份占据半壁江山
- PAT A1065 A+B and C (64bit) (20 分)
- 向量与向量的叉积和向量与矩阵的叉积数学表达式与python 实现
- 1046 Shortest Distance (20 分)【难度: 简单 / 知识点: 前缀和 / 破环成链】
- Socket套接字 =======================
- PyTorch官方教程中文版:Pytorch之图像篇
- 互联网从业者平均年薪19万,程序员最高!
- 路由器snmp配置_S7503E V7 snmpv3典型组网配置案例(与IMC联动)
- vivo6.0系统怎么样不用root激活XPOSED框架的方法
- 和pythondjango后端_webGIS实践:4_0_python django后端搭建web工程
- Django-Model操作数据库(增删改查、连表结构)
- php中$t=date()函数参数意义及时间更改
- Visio2013里面的大括号
- UDS/OBD DTC(诊断故障码)格式解析
- python多进程协同_简单谈谈python中的多进程
- Linux TCP Timestamps 没鸟用
- neural networks logistic regression 神经网络逻辑回归
- QT中文字体显示以及字体大小不能改变的问题
- vscode默认输出到调试控制台
热门文章
- 正态分布的前世今生:正态分布的进一步发展
- JAVA偏向锁的什么时候释放_​java偏向锁,你还没上车,它就要被去掉了
- 图像局部特征(十六)--SimpleBlobDetector
- Windows下VB6.0开发——VB程序断点调试与顺序执行不一致问题(通信原因)
- 计算机械效率的公式怎么读,机械效率公式总结
- 文件分配表(File Allocation Table)入门
- Hive 入门练习题
- 全面详解c语言使用cJSON解析JSON字符
- day23_内置函数(__del__ item系列 ,模块)
- 1019 数字黑洞 (20)