派生类的基类值的初始化

时间:2017-07-22 18:03:37

标签: c++ inheritance initialization

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

有没有一种方法可以在每次创建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 

1 个答案:

答案 0 :(得分:2)

你可以使用静态变量,在类范围或方法范围内(后者有一些差异,如延迟初始化,线程安全初始化等等)虽然,它在你的用例中没有太大的区别,但最好记住后者作为一种选择)。例如

#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;
}

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