在继承中提升库
boost library in Inheritance
本文关键字:继承 更新时间:2023-10-16
最近我遇到了以下问题。我想不通原因。谁能指出我。
"缓冲"的父类是什么?您认为为什么选择这作为父类?使用此父类的主要限制是什么?
示例代码
template <typename T>
class Buffered : private boost::noncopyable
{
public:
explicit Buffered (const T& value = T())
: current_ (value), next_ (value) {}
virtual ~Buffered() {}
const T& get() const {
return current_;
}
void set (const T& value) {
next_ = value;
}
void skip() {
this->set(this->get());
}
void force(const T& value) {
next_ = current_ = value;
}
void flip() {
current_ = next_;
}
private:
T current_;
T next_;
};
如果你不希望你的用户能够通过复制来创建你的类的任何实例(在这种情况下Buffered
),你可以从boost::noncopyable派生你的类。
简而言之,它使您的类不可复制。
提升文档清楚地说明了目的:
私有副本构造函数和副本赋值确保类派生自
无法复制不可复制的类。
如果您没有使用 boost,那么您可以通过以下方式使您的类不可复制:
- 声明类复制构造函数和复制赋值运算符
private
- 没有为它们提供任何定义。
第一个会给你一个编译错误,如果有人试图复制你的类实例,
而,第二个通过给出链接错误来保护您防止通过 friend
s间接复制。
在 C++11 中,你也可以说类似
class Class {
Class (Class const & other) = delete;
};
然后,如果您尝试使用成员函数/友元函数访问它,则会收到编译时错误,而不是链接器错误。
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 如何创建从同一类继承的不同对象的向量
- 如何从另一个文件继承私有成员变量和公共函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 带有继承的C++工厂
- 我应该避免多重实现继承吗
- C++继承更改成员
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 关于C++中具有多重继承"this"指针的说明
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- 如何在QT Creator上将QWidget声明为继承类的对象