当前位置:  开发笔记 > 编程语言 > 正文

构造函数中冒号之后的成员变量列表是什么?

如何解决《构造函数中冒号之后的成员变量列表是什么?》经验,为你挑选了3个好方法。

我正在阅读这个C++开源代码,我来到了一个构造函数,但我没有得到它(主要是因为我不知道C++:P)

我非常了解C和Java.

 TransparentObject::TransparentObject( int w, int x, int y, int z ) : 
     _someMethod( 0 ),
     _someOtherMethod( 0 ),
     _someOtherOtherMethod( 0 ),
     _someMethodX( 0 ) 
  {
       int bla;
       int bla;
  }

到目前为止我可以"演绎"第一行只声明了construtor名称,"::"听起来像"属于"我.而{}之间的代码是它自己的构造函数体.

我"认为"在参数之后是什么,第一个"{"就像方法默认参数或其他什么,但我在网上找不到合理的解释.我在示例中找到的大多数C++构造函数几乎与Java中的相同.

在我的假设中,我是对的吗?"::"就像属于,而params和body之后的列表就像"默认args"之类的东西?

更新: 谢谢你的答案.那些被称为方法?(我猜不是)在构造函数体内调用它们有什么不同



1> Jason Baker..:

最常见的情况是:

class foo{
private:
    int x;
    int y;
public:
    foo(int _x, int _y) : x(_x), y(_y) {}
}

这将设置xy于在给定值_x,并_y在构造函数中的参数.这通常是构造声明为数据成员的任何对象的最佳方法.

您也可能正在查看构造函数链接:

class foo : public bar{
    foo(int x, int y) : bar(x, y) {}
};

在这个例子中,类的构造函数将调用其基类的构造函数并传递值xy.

进一步剖析功能:

TransparentObject::TransparentObject( int w, int x, int y, int z ) : 
   _someMethod( 0 ),
   _someOtherMethod( 0 ),
   _someOtherOtherMethod( 0 ),
   _someMethodX( 0 ) 
{
     int bla;
     int bla;
}

::-运算符称为作用域运算符.它基本上只是表明它TransparentObject是一个成员TransparentObject.其次,假设构造函数的主体出现在花括号中,你是正确的.

更新:谢谢你的答案.那些被称为方法?(我猜不是)在构造函数体内调用它们有什么不同

关于这个主题的信息比我在这里给你的要多得多.您必须使用初始化列表的最常见区域是初始化引用时,或者const在创建时必须立即为这些变量赋值.



2> Adam Pierce..:

你很近.第一行是声明.::左边的标签是类名,并且作为构造函数,函数名必须与类名相同.

TransparentObject::TransparentObject( int w, int x, int y, int z )

在C++中,您可以选择在函数体开始之前为成员变量添加冒号和一些初始值.如果要初始化任何const变量或将参数传递给超类构造函数,则必须使用此技术.

: 
 _someMethod( 0 ),
 _someOtherMethod( 0 ),
 _someOtherOtherMethod( 0 ),
 _someMethodX( 0 )

然后是花括号中构造函数的主体.

{
   int bla;
   int bla;
}



3> mdec..:

::实际上意味着包含(参见澄清的注释),但_someMethods等等就是所谓的初始化列表.链接上有很多信息=]

编辑:对不起,我的第一句话不正确 - 请参阅评论.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有