如何在C ++中的派生类的构造函数中初始化基类的const变量?

时间:2010-10-11 08:52:19

标签: c++ inheritance constructor const

我有一个没有构造函数的抽象C ++类。它应该是一个基类,所以其他类可以继承它。我想要做的是在基类中声明一个常量变量,并在每个派生类的构造函数中初始化它,但在每个类中没有其他地方。它在C ++中是否合法?如果是这样,我该怎么做?

3 个答案:

答案 0 :(得分:22)

  

在C ++中是否合法?

没有。常量必须在基类构造函数中初始化。

解决方案是在基类中提供适当的构造函数 - 否则无法使用它。此外,没有理由不提供该构造函数。

class Base {
    int const constant;
public:
    virtual ~Base() = 0; // Makes this an abstract base class.
protected:
    Base(int c) : constant(c) { }
};

// Must be implemented!
Base::~Base() { }

class Derived : public Base {
public:
    Derived() : Base(42) { }
};

答案 1 :(得分:1)

如果你需要这样做的话:

struct Base {
    Base( std::string const & someValue )
    : const_value( someValue ) {
    }
protected:
   std::string const const_value;
};

struct Derived : Base {
    Derived()
    : Base("Derived"){
    }
};

原因是您只能在初始化时为const值赋值。初始化Base后,不再允许您修改该值。因此,您必须按上述方式执行此操作。

答案 2 :(得分:0)

为什么不在抽象基类中创建受保护的构造函数并在那里设置常量值?