How can I initialize a const variable of a base class in a derived class' constructor in C++?

夙愿已清 提交于 2019-12-18 03:57:10

问题


I have an abstract C++ class with no constructor. It's supposed to be a base class so other classes can inherit from it. What I am trying to do is to declare a constant variable in the base class and initialize it in each derived class' constructor but nowhere else in each one of those classes. Is it legal in C++? If so, how can I do that?


回答1:


Is it legal in C++?

No. The constant must be initialized in the base class constructor.

The solution is to provide an appropriate constructor in your base class – otherwise it cannot be used. Furthermore, there’s no reason not to provide that constructor.

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) { }
};



回答2:


If at all you need to do it this way:

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

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

The reason for this is that you are only allowed to assign values to a const value at initialization time. Once Base is initialized you are no longer allowed to modify the value. Therefore you have to do it that way as shown above.




回答3:


Why don't you make a protected constructor in the abstract base class and set the constant value there?



来源:https://stackoverflow.com/questions/3904759/how-can-i-initialize-a-const-variable-of-a-base-class-in-a-derived-class-constr

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!