一个构造多次的类中某个成员变量需要只调用一次
时间: 2023-08-18 12:05:08 浏览: 42
可以使用静态成员变量来实现只调用一次的效果。静态成员变量是属于类的,而不是属于某个对象的,因此在多次构造对象时只会被初始化一次。在构造函数中,可以使用静态成员变量的值来判断是否需要再次进行初始化。如果静态成员变量已经被初始化过,那么就不需要再次进行初始化。例如,下面的代码中,使用了一个静态成员变量来控制只调用一次的效果:
```c++
class MyClass {
public:
MyClass() {
if (!initialized) {
// 只在第一次构造对象时执行以下代码
// ...
initialized = true;
}
}
private:
static bool initialized;
};
bool MyClass::initialized = false;
```
相关问题
一个构造多次的类中某个成员变量从头到尾需要只调用一次
如果一个成员变量需要从头到尾只调用一次,可以使用静态成员变量和静态函数来实现。在静态函数中完成对成员变量的初始化,并返回该成员变量的值。在构造函数中,使用静态函数来获取成员变量的值,如果该成员变量已经被初始化过,就不需要再次进行初始化。例如,下面的代码中,使用了一个静态成员变量和一个静态函数来实现从头到尾只调用一次的效果:
```c++
class MyClass {
public:
MyClass() {
if (!initialized) {
// 只在第一次构造对象时执行以下代码
member_var = init_member_var();
initialized = true;
}
}
private:
static bool initialized;
static int member_var;
static int init_member_var() {
// 初始化 member_var 的代码
return 0; // 返回 member_var 的初始值
}
};
bool MyClass::initialized = false;
int MyClass::member_var = 0;
```
这样,每次构造对象时只需要判断 initialized 是否为 true,如果为 true,直接使用 member_var 的值即可,否则调用 init_member_var() 函数初始化 member_var,并将 initialized 置为 true。由于 init_member_var() 函数是静态的,只会被调用一次,因此 member_var 也只会被初始化一次。
继承的有参构造初始化列表就一次吗
不是的,继承的有参构造函数可以使用初始化列表一次性初始化多个基类和成员变量。在初始化列表中,可以通过逗号分隔来初始化多个基类或成员变量。
例如,考虑以下示例代码:
```cpp
class Base {
public:
Base(int a) {
// 基类构造函数的实现
}
};
class Derived : public Base {
public:
Derived(int a, int b) : Base(a), member(b) {
// 初始化列表中同时初始化基类和成员变量
}
private:
int member;
};
```
在上述示例中,`Derived` 类继承自 `Base` 类,并且有一个成员变量 `member`。在 `Derived` 类的构造函数中,通过初始化列表同时初始化基类和成员变量。使用逗号分隔,首先调用 `Base` 类的构造函数 `Base(a)`,然后初始化成员变量 `member(b)`。
因此,通过初始化列表,可以一次性初始化多个基类和成员变量,提高代码的可读性和效率。