我有一个没有构造函数的抽象C ++类。它应该是一个基类,所以其他类可以继承它。我想要做的是在基类中声明一个常量变量,并在每个派生类的构造函数中初始化它,但在每个类中没有其他地方。它在C ++中是否合法?如果是这样,我该怎么做?
答案 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)
为什么不在抽象基类中创建受保护的构造函数并在那里设置常量值?