第51页最上面:
CEx04aView::CEx04aView():m_rectEllipse(0,0,200,200)
{
m_nColor=GRAY_BRUSH;
}是什么意思呢?我知道CEx04aView()是类的成员函数(构造),这里是它的实现代码,可是问题是为什么后面还有个:m_rectEllipse(0,0,200,200),这样写下来m_rectEllipse是什么呢和CEx04aView()是什么关系呢冒号又是什么意思呢?
我从来没见过这样的代码,我初学,请高手指点
CEx04aView::CEx04aView():m_rectEllipse(0,0,200,200)
{
m_nColor=GRAY_BRUSH;
}是什么意思呢?我知道CEx04aView()是类的成员函数(构造),这里是它的实现代码,可是问题是为什么后面还有个:m_rectEllipse(0,0,200,200),这样写下来m_rectEllipse是什么呢和CEx04aView()是什么关系呢冒号又是什么意思呢?
我从来没见过这样的代码,我初学,请高手指点
但是如果你的类中有const的成员变量 就必须使用这种初始化来对const进行
其实这样写是被推荐的 效率比赋值要高
CEx04aView::CEx04aView()
{
m_rectEllipse(0,0,200,200);
m_nColor=GRAY_BRUSH;
}
但是不对,
------------Type from <C++ primer V3>
如果你写成
CEx04aView::CEx04aView()
{
m_rectEllipse=CRect(0,0,200,200);
m_nColor=GRAY_BRUSH;
}
结果是一样的.
但是这样写的话 再实例话一个CEx04aView的时候 由于类成员变量中m_rectEllipse没有被赋初值,所以他的默认构造函数先会被调用 然后程序执行到类的构造函数 这时候对于m_rectEllipse来说 又会执行CRect类的operator =的重载函数
如果你直接使用vc技术内幕上面的那种写法 那么只会有m_rectEllipse的拷贝构造函数按照你给出的参数被调用 省去了一次函数调用
指向任何类型的const和引用数据成员,必须在成员初始化表中被初始化,否则会产生编译时刻错误。
看了你们的说法才觉的有点印象,赶紧去翻书,C++快忘光了。小弟刚学VC,可是很多书根本看不懂,请各位能不能推荐一本好书?
mfc windows没看过 我觉得mfc的话vc技术内幕介绍了一些 然后再看看深入浅出mfc 剩下的就是自己练了
不过win32sdk的开发一定要会, framework,rad再怎么封装 脱离不了api
我不太懂,sdk 需要专门找一本书来学吗?有专门讲这个的书吗能说一下吗?