从子类设置const成员值

set const member value from subclass

本文关键字:成员 const 设置 子类      更新时间:2023-10-16

代码:

struct A{
    const bool const_some_write_once_flag;
    A(): const_some_write_once_flag(false) { }
};
struct B: public A{
    B(): const_some_write_once_flag(true) { }
};

错误为:类"B"没有任何名为"constrongome_write_one_flag"的字段。我认为这是因为在B的构造函数中,创建的对象还不是A类型,因为A的"继承切片"还没有初始化。

我已经尝试了几种变通方法,但都没有成功,在这里我将省略它们。有没有办法实现我想要做的事情?

在其初始值设定项列表中,B只能初始化其自己的数据成员、直接基类和任何虚拟基类。CCD_ 5不是这些;它是CCD_ 6的数据成员。它只能由A的构造函数初始化。

struct A{
    const bool const_some_write_once_flag;
    A(): const_some_write_once_flag(false) { }
protected:
    A(bool flag) : const_some_write_once_flag(flag) { }
};
struct B: public A{
    B(): A(true) { }
};

以下内容几乎实现了您想要做的。它确实创建了一个受保护的a成员,但任何其他选择从a继承的类都可以使用该成员。你可以更具保护性,让B成为a的朋友,然后让接受参数的构造函数私有化。

class A{
    public:
        const bool const_some_write_once_flag;
        A(): const_some_write_once_flag(false) { }
    protected:
        A( const bool initialValue ): const_some_write_once_flag( initialValue ) {}
};
class B: public A{
    public:
        B(): A(true) { }
};
相关文章: