如何创建在 c++ 中只读取一次的初始化函数

How to create a initialization function that only read once in c++

本文关键字:一次 函数 初始化 读取 何创建 创建 c++      更新时间:2023-10-16

我有这个类:

class A : public B

我需要添加一些受保护的字段:_field,在 A 中,我无法触摸/更改 B。现在,除了构造函数之外,B 和 A 中的所有函数都是虚拟的。显然,_field不属于B类。

我需要初始化_field。如果唯一的构造函数是 B 的,我该怎么做?另外,像这样:

unsigned long _field = 0;

给了我一个错误编译。

我通过以下方式解决这个问题:

class A : public B
{
protected: 
  unsigned long _field;
public:
  void fooFunction(){
     ....do other stuff....
     static bool isInitField = false;
     if (!isInitField){
       _field = 0;
       isInitField = true;
     }
     ...rest of the function...
  }

有没有更好的方法可以在不使用静态的情况下做到这一点?

谢谢或者

使用 A 构造函数

并在初始化列表中调用 B 构造函数,这样就可以初始化类 A 的所有字段:

A(unsigned long i, other_paramaters oth) : B(oth),_field(i) {
}

请原谅我,实际上我没有理解你的问题。就一次性初始化而言,构造函数是执行此操作的地方。但是您提出的解决方案暗示您想要其他东西。

函数定义中的静态将使_field类的所有对象中只能修改一次,这使得_field一次性可修改是一种有点尴尬的机制。

如果只想初始化_field请使用初始化。埃斯特万的解决方案就可以了。更好地使用

A(无符号长 i, other_paramaters oth) : B(oth),_field(i) {}

A(params

):B(params),_field(0){}

相关文章: