我正在阅读这个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"之类的东西?
更新: 谢谢你的答案.那些被称为方法?(我猜不是)在构造函数体内调用它们有什么不同
最常见的情况是:
class foo{ private: int x; int y; public: foo(int _x, int _y) : x(_x), y(_y) {} }
这将设置x
并y
于在给定值_x
,并_y
在构造函数中的参数.这通常是构造声明为数据成员的任何对象的最佳方法.
您也可能正在查看构造函数链接:
class foo : public bar{ foo(int x, int y) : bar(x, y) {} };
在这个例子中,类的构造函数将调用其基类的构造函数并传递值x
和y
.
进一步剖析功能:
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
在创建时必须立即为这些变量赋值.
你很近.第一行是声明.::左边的标签是类名,并且作为构造函数,函数名必须与类名相同.
TransparentObject::TransparentObject( int w, int x, int y, int z )
在C++中,您可以选择在函数体开始之前为成员变量添加冒号和一些初始值.如果要初始化任何const变量或将参数传递给超类构造函数,则必须使用此技术.
: _someMethod( 0 ), _someOtherMethod( 0 ), _someOtherOtherMethod( 0 ), _someMethodX( 0 )
然后是花括号中构造函数的主体.
{ int bla; int bla; }
::实际上意味着包含(参见澄清的注释),但_someMethods等等就是所谓的初始化列表.链接上有很多信息=]
编辑:对不起,我的第一句话不正确 - 请参阅评论.