繁体   English   中英

初始化派生类的基类值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM