C++关于构造函数的初始化问题

[复制链接]
查看11 | 回复5 | 2011-8-15 18:56:25 | 显示全部楼层 |阅读模式
假如有一个类:CMFCView,他的构造函数是CMFCView() ;
定义构造函数:CMFCView()

{

x = 0 ;

y = 0 ; //假设有两个成员变量x,y

}
这是我所知道的,即初始化变量是在构造函数函数体里面的,可是最近在学MFC时,
VS2008中通过MFC向导建立的源文件中,初始化变量是这么进行的:

CMFCView::CMFCView()

: x(0)

, y(0)
{
        // TODO: 在此处添加构造代码
}
这是一种什么用法?能解释的越详细越好,在这里先谢谢大家~\(≧▽≦)/~啦啦啦
第二种里面函数体里面都加些神马啊

回复

使用道具 举报

千问 | 2011-8-15 18:56:25 | 显示全部楼层
构造函数运行的过程有两步。一是初始化,就是你说的: x(0) , y(0)。二是执行函数体。注意如果没有显式指明x(0) , y(0)(你的第一种),即没有显式的调用x,y的构造函数进行初始化,x,y仍然会被初始化(调用默认构造函数)...
回复

使用道具 举报

千问 | 2011-8-15 18:56:25 | 显示全部楼层
CMFCView::CMFCView()
: x(0)
, y(0)中的0 , 0 就是你在初始化x,y时直接对他们进行的赋值,效率高而已。...
回复

使用道具 举报

千问 | 2011-8-15 18:56:25 | 显示全部楼层
这叫作:初始化列表,用把括号里的值赋值,效果一样,不过有些情况必须这样写,你可以查查,楼上的说的只是一种情况。大括号里是对派生类新增数据成员赋值用的。...
回复

使用道具 举报

千问 | 2011-8-15 18:56:25 | 显示全部楼层
一般纯粹是初始类中私有数据成员的时候,才会用第二种.函数体里面不用加任何其它语句了....
回复

使用道具 举报

千问 | 2011-8-15 18:56:25 | 显示全部楼层
“:”后面叫初始化列表效果一样也是 x = 0;y = 0;...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行