[英]Initialization of base class value for derived class
我想创建基类Foo
ab对象,该对象将变量value
初始化为我决定的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;
}
我刚刚为您提供了所需的解决方案。 请记住,这可能不是实现所需目标的最佳方法。 理想情况下,对象的构造参数应仅影响当前对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.