gpt4 book ai didi

c++ - 我可以强制继承一个类吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:05 26 4
gpt4 key购买 nike

考虑以下类:

//! Counter class base. Must be inherited.
class base_seeded_counter
{
public:
//! Destructor
virtual ~base_seeded_counter() { };

//! Get the next value.
int get_next();

protected:
//! Override the counter next value.
void set_next(const int next);

private:
int m_next_value; // Next value.
}

// ------------------------------------------------------

inline int base_seeded_counter::get_next()
{
return m_next_value++;
}

// ------------------------------------------------------

inline void base_seeded_counter::set_next(const int next)
{
m_next_value = next;
}

这个类的目的是实现一个基本计数器对象,目的是它必须被继承。除了析构函数之外,它没有任何虚方法,更重要的是,不初始化 m_next_value 成员。这是派生类的工作。例如:

class file_seeded_counter : public base_seeded_counter
{
public:
file_seeded_counter(const std::string &file_name);

void reseed();

private:
std::string m_file_name;
}

inline int file_seeded_counter::file_seeded_counter(const std::string &file_name) :
m_file_name(file_name)
{
reseed();
}

inline void file_seeded_counter::reseed()
{
int seed_from_file;

// open file here and get seed value...

set_next(seed_from_file);
}

此类派生自 base_seeded_counter 从文件中读取初始计数器值,并提供通过 reseed() 方法从文件中重新读取种子的能力。例如,可能还有其他类提供类似的功能以从数据库、网络源或 PRNG 中播种。

我的问题是:鉴于我没有纯虚方法,C++ 是否提供一种机制来防止有人创建 base_seeded_counter 的实例?

最佳答案

My question is this: Given that I have no pure virtual methods, does C++ offer a mechanism to prevent someone from creating an instance of base_seeded_counter?

是的,给它一个protected默认构造函数(可能是空的)。

关于c++ - 我可以强制继承一个类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39837518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com