如何创建在 c++ 中只读取一次的初始化函数
How to create a initialization function that only read once in c++
我有这个类:
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){}
相关文章:
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 如何为非常量和常量重载实现一次成员函数?
- 某些 boost::asio 异步函数是否将处理程序连接到操作,以便处理程序被触发一次?
- 如何一次运行3个函数?
- 循环中本地对象的析构函数是否保证在下一次迭代之前被调用?
- 调用函数一次用于动态链接库,一次从可执行文件调用函数
- 仅在函数中设置静态变量一次
- 有没有办法一次运行 3 个创建窗口函数?
- 在可变函数调用中执行一次语句
- 为什么转换运算符调用复制构造函数两次,而等效函数只调用它一次
- 为什么一次包装 typedef 函数签名与原始签名不匹配
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- 我需要线程函数在不停止实际程序的情况下,每2秒打印一次随机数
- Android JNI RegisterNatives:对所有内容调用一次,或者每个函数调用一次
- 如何在 constexpr 构造函数中初始化矩阵一次?
- cppUnit:针对多个测试方法执行一次的设置函数
- 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串? 如何创建一个函数本地静态"HashSet<char>"并初始化它一次?
- 跨类的多个实例调用函数一次
- C++一次将函数标记为静态就足够了?