gpt4 book ai didi

c++ - 派生类的基类值的初始化

转载 作者:行者123 更新时间:2023-11-28 01:45:36 25 4
gpt4 key购买 nike

我想创建基类 Foo 的 ab 对象,将变量 value 初始化为我决定的值,然后我想创建派生类的对象 Bar 和我之前决定的变量值与 Bar 继承的 Foo 保持一致,就像变量值的一次常量初始化一样。

有没有办法在每次创建 Bar 对象(如 Foo 对象)或将类值默认为 5 时都传递值?

例子:

// Base class
class Foo {
private:
int value;
public:
Foo() {}
Foo(int value) : value(value) {}
int getValue() { return value; }
};

// Derived class
class Bar : public Foo {
private:
public:
Bar() {}
};

Foo foo(5);
foo.getValue() // 5
Bar bar;
bar.getValue() // this I also want to be 5 now

最佳答案

您可以在类作用域或方法作用域中使用静态变量执行此操作(后者有一些差异,如惰性初始化、线程安全初始化等。虽然,它在您的用例中没有太大区别,但最好将后者作为一种选择牢记在心)。例如

#include <iostream>

using std::cout;
using std::endl;

// Base class
class Foo {
private:
static int value;
public:
Foo() {}
Foo(int value) {
Foo::value = value;
}
int getValue() { return value; }
};

int Foo::value = 0;

// Derived class
class Bar : public Foo {
private:
public:
Bar() {}
};

int main() {
Foo foo(5);
cout << foo.getValue() << endl;
Bar bar;
cout << bar.getValue() << endl;
}

我刚刚为您提供了您想要的解决方案。请记住,这可能不是实现您想要的目标的最佳方式。理想情况下,对象的构造参数应该只影响当前对象。

关于c++ - 派生类的基类值的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45257665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com