一个小问题,望高手解答一下 谢! 1 class A2 {3 public:4 A(double):a(b){};5 ...... 第四行代码的意思是? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 A(double):a(b){};是个构造函数,参数类型是double(但是没有形参的名字,也是可以的),函数体为空:后面是构造函数的初始化表,a(b)表示构造的时候,a将被赋值为b,所以A中应该成员a但是b......,所以有可能是这样的:A(double b/*注意这里*/):a(b){}; 类的构造函数进行成员变量初始化参看林锐的《高质量C、C++编程指南》之 “9.2 构造函数的初始化表”构造函数有个特殊的初始化方式叫“初始化表达式表”(简称初始化表)。初始化表位于函数参数表之后,却在函数体 {} 之前。这说明该表里的初始化工作发生在函数体内的任何代码被执行之前。构造函数初始化表的使用规则:􀂋 如果类存在继承关系,派生类必须在其初始化表里调用基类的构造函数。例如class A{…A(int x); // A 的构造函数};class B : public A{…B(int x, int y);// B 的构造函数};B::B(int x, int y): A(x) // 在初始化表里调用A 的构造函数{…}􀂋 类的const 常量只能在初始化表里被初始化,因为它不能在函数体内用赋值的方式来初始化(参见5.4 节)。类的数据成员的初始化可以采用初始化表或函数体内赋值两种方式,这两种方式的效率不完全相同。非内部数据类型的成员对象应当采用第一种方式初始化,以获取更高的效率。例如class A{…A(void); // 无参数构造函数A(const A &other); // 拷贝构造函数A & operate =( const A &other); // 赋值函数};class B{public:B(const A &a); // B 的构造函数private:A m_a; // 成员对象};示例9-2(a)中,类B 的构造函数在其初始化表里调用了类A 的拷贝构造函数,从而将成员对象m_a 初始化。示例9-2 (b)中,类B 的构造函数在函数体内用赋值的方式将成员对象m_a 初始化。我们看到的只是一条赋值语句,但实际上B 的构造函数干了两件事:先暗地里创建m_a对象(调用了A 的无参数构造函数),再调用类A 的赋值函数,将参数a 赋给m_a。B::B(const A &a): m_a(a){…}B::B(const A &a){m_a = a;…}示例9-2(a) 成员对象在初始化表中被初始化 示例9-2(b) 成员对象在函数体内被初始化对于内部数据类型的数据成员而言,两种初始化方式的效率几乎没有区别,但后者的程序版式似乎更清晰些。若类F 的声明如下:class F{public:F(int x, int y); // 构造函数private:int m_x, m_y;int m_i, m_j;}示例9-2(c)中F 的构造函数采用了第一种初始化方式,示例9-2(d)中F 的构造函数采用了第二种初始化方式。F::F(int x, int y): m_x(x), m_y(y){m_i = 0;m_j = 0;}F::F(int x, int y){m_x = x;m_y = y;m_i = 0;m_j = 0;}示例9-2(c) 数据成员在初始化表中被初始化 示例9-2(d) 数据成员在函数体内被初始化 一个图像处理代码的疑问? 莱鸟级新手求助 CPtrList类可以用来做什么,是否可以用来传输数据呢! OPENGL超级宝典源代码!? 为什么我的Dll是Debug可以运行而release的就不行呢? ADO的参数化查询(关键字:ADO 参数化查询 , _ParameterPtr, 这个警告是什么意思? 如何知道CListCtrl中,鼠标当前位置所在的列的index号码?在线急,老板明天就要我交活,现在遇到这个问题 各位软件同仁,哪里有关于vc编程规范的文章,多多益善!来者有分,不够再加! CBitmapButton的问题? 如何改变状态栏中各个窗格的宽度????? 自己的一个类如何关联控件
是个构造函数,参数类型是double(但是没有形参的名字,也是可以的),函数体为空
:后面是构造函数的初始化表,a(b)表示构造的时候,a将被赋值为b,所以A中应该成员a
但是b......,所以有可能是这样的:A(double b/*注意这里*/):a(b){};
参看林锐的《高质量C、C++编程指南》之 “9.2 构造函数的初始化表”构造函数有个特殊的初始化方式叫“初始化表达式表”(简称初始化表)。初始化表
位于函数参数表之后,却在函数体 {} 之前。这说明该表里的初始化工作发生在函数体
内的任何代码被执行之前。
构造函数初始化表的使用规则:
􀂋 如果类存在继承关系,派生类必须在其初始化表里调用基类的构造函数。
例如
class A
{…
A(int x); // A 的构造函数
};
class B : public A
{…
B(int x, int y);// B 的构造函数
};
B::B(int x, int y)
: A(x) // 在初始化表里调用A 的构造函数
{
…
}
􀂋 类的const 常量只能在初始化表里被初始化,因为它不能在函数体内用赋值的方式
来初始化(参见5.4 节)。类的数据成员的初始化可以采用初始化表或函数体内赋值两种方式,这两种方式的
效率不完全相同。
非内部数据类型的成员对象应当采用第一种方式初始化,以获取更高的效率。例如
class A
{…
A(void); // 无参数构造函数
A(const A &other); // 拷贝构造函数
A & operate =( const A &other); // 赋值函数
};
class B
{
public:
B(const A &a); // B 的构造函数
private:
A m_a; // 成员对象
};
示例9-2(a)中,类B 的构造函数在其初始化表里调用了类A 的拷贝构造函数,从而
将成员对象m_a 初始化。
示例9-2 (b)中,类B 的构造函数在函数体内用赋值的方式将成员对象m_a 初始化。
我们看到的只是一条赋值语句,但实际上B 的构造函数干了两件事:先暗地里创建m_a
对象(调用了A 的无参数构造函数),再调用类A 的赋值函数,将参数a 赋给m_a。
B::B(const A &a)
: m_a(a)
{
…
}
B::B(const A &a)
{
m_a = a;
…
}
示例9-2(a) 成员对象在初始化表中被初始化 示例9-2(b) 成员对象在函数体内被初始化
对于内部数据类型的数据成员而言,两种初始化方式的效率几乎没有区别,但后者
的程序版式似乎更清晰些。若类F 的声明如下:
class F
{
public:
F(int x, int y); // 构造函数
private:
int m_x, m_y;
int m_i, m_j;}
示例9-2(c)中F 的构造函数采用了第一种初始化方式,示例9-2(d)中F 的构造函
数采用了第二种初始化方式。
F::F(int x, int y)
: m_x(x), m_y(y)
{
m_i = 0;
m_j = 0;
}
F::F(int x, int y)
{
m_x = x;
m_y = y;
m_i = 0;
m_j = 0;
}
示例9-2(c) 数据成员在初始化表中被初始化 示例9-2(d) 数据成员在函数体内被初始化