日期:2011-03-22 13:55:00 来源:本站整理
初始化C++类成员和在你的MFC利用中加入位置栏[VC/C++编程]
本文“初始化C++类成员和在你的MFC利用中加入位置栏[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
问题
我的问题是关于初始化C++类成员的.我见过很多这样的代码(包含在你的栏目中也见到过):
CSomeClass::CSomeClass()
{
x=0;
y=1;
}
而在别的什么地方则写成下面的模样:
CSomeClass::CSomeClass() : x(0), y(1)
{
}
我的一些程序员朋友说第二种办法对比好,但他们都不知道为什么是这样.你能奉告我这两种类成员初始化办法的辨别吗?
答复
从技术上说,你的程序员朋友是对的,但是在大大都情形下,二者实际上没有辨别.有两个缘由使得我们挑选第二种语法,它被称为成员初始化列表:一个缘由是必须的,另一个只是出于效率考虑.
让我们先看一下第一个缘由——必要性.假想你有一个类成员,它本身是一个类大概构造,并且只有一个带一个参数的构造函数.
class CMember {
public:
CMember(int x) { ... }
};
因为Cmember有一个显式声明的构造函数,编译器不产生一个缺省构造函数(不带参数),所以没有一个整数就无法成立Cmember的一个实例.
CMember* pm = new CMember; // Error!!
CMember* pm = new CMember(2); // OK
假如Cmember是另一个类的成员,你怎样初始化它呢?你必须利用成员初始化列表.
class CMyClass {
CMember m_member;
public:
CMyClass();
};
//必须利用成员初始化列表
CMyClass::CMyClass() : m_member(2)
{
•••
}
没有别的办法将参数传送给m_member,假如成员是一个常量对象大概引用也是一样.按照C++的法则,常量对象和引用不能被赋值,它们只能被初始化.
以上是“初始化C++类成员和在你的MFC利用中加入位置栏[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论