<b>关于初始化C++类成员</b>[VC/C++编程]
本文“<b>关于初始化C++类成员</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在利用C++编程的历程当中,常常需求对类成员举行初始化,普通的办法有两种:
第一种办法:
CMYClass::CSomeClass()
{
x=0;
y=1;
}
第二种办法:
CSomeClass::CSomeClass() : x(0), y(1)
{
}
本文将要探究这两种办法的异同以及若何利用这两种办法.
从技术上说,第二种办法对比好,但是在大大都情形下,二者实际上没有什么辨别.第二种语法被称为成员初始化列表,之所以要利用这种语法有两个缘由:一个缘由是必须这么做,另一个缘由是出于效率考虑.
让我们先看一下第一个缘由——必要性.假想你有一个类成员,它本身是一个类大概构造,并且只有一个带一个参数的构造函数.
class CMember {
public:
CMember(int x) { ... }
};
因为CMember有一个显式声明的构造函数,编译器不产生一个缺省构造函数(不带参数),所以没有一个整数就无法成立CMember的一个实例.
CMember* pm = new CMember; // 出错!!
CMember* pm = new CMember(2); // OK
假如CMember是另一个类的成员,你怎样初始化它呢?答案是你必须利用成员初始化列表.
class CMyClass {
CMember m_member;
public:
CMyClass();
};
// 必须利用初始化列表来初始化成员 m_member
CMyClass::CMyClass() : m_member(2)
{
•••
}
没有别的办法将参数传送给m_member,假如成员是一个常量对象大概引用也是一样.按照C++的法则,常量对象和引用不能被赋值,它们只能被初始化.
利用初始化列表的第二个缘由是出于效率考虑,当作员类具有一个缺省的构造函数和一个赋值操作符时.MFC的CString供应了一个完善的例子.假定你有一个类CMyClass具有一个CString范例的成员m_str,你想把它初始化为"Hi,how are you.".你有两种挑选:
CMyClass::CMyClass() {
// 利用赋值操作符
// CString::operator=(LPCTSTR);
m_str = _T("Hi,how are you.");
}
// 利用初始化列表
// 和构造函数 CString::CString(LPCTSTR)
CMyClass::CMyClass() : m_str(_T("Hi,how are you."))
{
}
以上是“<b>关于初始化C++类成员</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |