【问题标题】:Initializer of constructor构造函数的初始化器
【发布时间】:2025-12-30 02:35:11
【问题描述】:

首先,对于那些想投反对票的人,请注意成员变量未显示在类引用中,并且指向头文件的链接已损坏!

我有以下构造函数:

    Foam::IOobject::IOobject
143 (
144  const word& name,           
145  const fileName& instance,   
146  const objectRegistry& registry,   
147  readOption ro,
148  writeOption wo,
149  bool registerObject
150 )
151 :                               
152  name_(name),                         
153  headerClassName_(typeName),
154  note_(),
155  instance_(instance),
156  local_(),
157  db_(registry),
158  rOpt_(ro),
159  wOpt_(wo),
160  registerObject_(registerObject),
161  objState_(GOOD)
162 {
163  if (objectRegistry::debug)
164  {
165  Info<< "Constructing IOobject called " << name_
166  << " of type " << headerClassName_
167  << endl;
168  }
169 }

据我所知,初始化器用于:

  • 从派生类调用基类构造函数
  • 初始化类的成员变量

见:https://*.com/questions/2445330/importance-of-a-singlecolon-in-c

我只是无法弄清楚示例构造函数初始化程序中的元素是什么,因为它们不是IOobject 类的成员变量,也不是派生类的构造函数。谁能告诉我这些初始化元素是干什么用的?

恭喜

【问题讨论】:

  • 你确定这些不是类的成员变量吗?你只贴了构造函数的实现,可以添加类的定义(从它的头文件中)吗?
  • 如果没有数据成员或基类,代码将无法编译。
  • 看起来name_可能是一个成员变量,在这种情况下,如果有基类,则默认初始化。
  • @Luecking:很好的评论,注意类引用中没有显示成员变量,并且到头文件的链接被破坏了!

标签: c++ methods constructor initializer


【解决方案1】:

IOobject 类定义了以下成员(头文件):

127  //- Name
128  word name_;
129 
130  //- Class name read from header
131  word headerClassName_;
132 
133  //- Optional note
134  string note_;
135 
136  //- Instance path component
137  fileName instance_;
138 
139  //- Local path component
140  fileName local_;
141 
142  //- objectRegistry reference
143  const objectRegistry& db_;
144 
145  //- Read option
146  readOption rOpt_;
147 
148  //- Write option
149  writeOption wOpt_;
150 
151  //- Register object created from this IOobject with registry if true
152  bool registerObject_;
153 
154  //- IOobject state
155  objectState objState_;

看看这里的头文件:http://foam.sourceforge.net/docs/cpp/a06519_source.html

这里是构造函数签名

IOobject    
(
    const word &        name,
    const word &        instance,
    const fileName &        local,
    const objectRegistry &      registry,
    readOption          r = NO_READ,
    writeOption         w = NO_WRITE,
    bool            registerObject = true
)

并且有可用的文档here

如果您需要更多详细信息,请告诉我,我会尽力为您寻找更多信息。

【讨论】:

  • 对我来说太快了@Street!大声笑,我需要更快地输入 methinks。
【解决方案2】:

从您的链接中,如果您导航到头文件,它会显示成员,因此很明显没有基类,并且构造函数中的初始化列表单独初始化成员。

127  //- Name
128  word name_;
129 
130  //- Class name read from header
131  word headerClassName_;
132 
133  //- Optional note
134  string note_;
135 
136  //- Instance path component
137  fileName instance_;
138 
139  //- Local path component
140  fileName local_;
141 
142  //- objectRegistry reference
143  const objectRegistry& db_;
144 
145  //- Read option
146  readOption rOpt_;
147 
148  //- Write option
149  writeOption wOpt_;
150 
151  //- Register object created from this IOobject with registry if true
152  bool registerObject_;
153 
154  //- IOobject state
155  objectState objState_;

【讨论】:

  • 谢谢,我现在明白了。成员变量没有显示在类引用中并且我第一次使用到头文件的链接已损坏,这不是我的错。