注册 登录
编程论坛 C++教室

初级问题,只花您几分钟

zzjking 发布于 2007-10-11 15:23, 574 次点击
我是c++初学者~
代码如下

class point3d
{
public:
point3d(float x = 0.0,floaty = 0.0,floatz = 0.0)
:_x(x),_y(y),_z(z){}

float x() { return _x; }
float y() { return _y; }
float z() { return _z; }

};
红色部分看不明白
构造函数完了用 是做什么用的?
后面的
_x(x),_y(y),_z(z) 又是什么意思?

[此贴子已经被作者于2007-10-11 15:24:39编辑过]

9 回复
#2
远去的列车2007-10-11 15:34

point3d(float x = 0.0,floaty = 0.0,floatz = 0.0)
:_x(x),_y(y),_z(z){}

在这里结果相当于
point3d(float x = 0.0,floaty = 0.0,floatz = 0.0)
{
_x = x;
_y = y;
_z = z;
}

注意的是:初始化的先后顺序不是冒号后面的顺序,而是按照成员变量声明的顺序
两种方法有区别(常量成员,引用成员,自定义类成员)

[此贴子已经被作者于2007-10-11 16:44:11编辑过]

#3
exqus2007-10-11 15:56
初始化表达式表
#4
aipb20072007-10-11 16:02
以下是引用远去的列车在2007-10-11 15:34:22的发言:

point3d(float x = 0.0,floaty = 0.0,floatz = 0.0)
:_x(x),_y(y),_z(z){}

相当于
point3d(float x = 0.0,floaty = 0.0,floatz = 0.0)
{
_x = x;
_y = y;
_z = z;
}

注意的是:赋值的先后顺序不是冒号后面的顺序,而是按照成员变量声明的顺序

不要把这两种行为混淆,前者是初始化,后者是赋值!
这是有很大区别的,建议翻看“构造函数初始化列表”

#5
exqus2007-10-11 16:58

里面关系到构建临时对象的问题

支持多用初始化列表

#6
海子星竹2007-10-11 18:56

受教了
今天是学到东西了

#7
忘记喧嚣2007-10-11 22:31
那他为什么 要用 _X做变量名?  "_"是什么意思?
#8
reedleaf2007-10-11 22:47
以下是引用忘记喧嚣在2007-10-11 22:31:14的发言:
那他为什么 要用 _X做变量名? "_"是什么意思?

定义私有成员变量的一种习惯,

#9
aipb20072007-10-11 22:53
以下是引用忘记喧嚣在2007-10-11 22:31:14的发言:
那他为什么 要用 _X做变量名? "_"是什么意思?

不是习惯,而是区分

_x是成员变量
x是构造函数形参,一样的话有时会出现不确定的问题。

也可以用this显示的告诉编译器,this->x表示成员

#10
microhero2007-10-12 14:48
1