防止在C++中调用基本分配运算符
Prevent call to base assignment operator in C++
我的库中有这两个类:
class Base {
int _handler;
protected:
Base() = default;
Base& operator=(int h) {
this->_handler = h;
return *this;
}
};
class Derived : public Base {
protected:
Derived() = default;
void initialize() {
this->Base::operator=(12345); // internal stuff
}
};
Derived
类可由用户继承。他应该这样做:
class User_Class : public Derived {
void foo() {
this->initialize();
}
};
但相反,他这样做:
class User_Class : public Derived {
void foo() {
this->Base::operator=(999); // no, you broke it!
}
};
如何防止调用Base
赋值运算符?
当我将标题更改为此标题时
class Derived : private Base
编译器立即使用"无法访问在类'Base'中声明的不可访问成员"阻止对operator=的调用,但是调用初始化的代码可以正常工作,因为它是可访问的。
但是,您还应该覆盖 Derived 中的 operator=,并让它检查它是否已初始化。 不要让客户端类处理内部簿记。
相关文章:
- 正在尝试重载二进制搜索树分配运算符
- 自定义先决条件对移动分配运算符有效吗
- C++ - 没有自定义交换功能的移动分配运算符?
- 强制复制分配超过移动分配运算符
- 在之后仍需要使用源对象时调用父移动分配运算符
- c++ 使用动态分配运算符反向数组元素
- 当存在用户定义的移动分配运算符时,已删除模板移动分配运算符
- C++ - 从移动分配运算符调用复制分配
- 不工作 复制分配运算符
- =删除用户定义的成员功能,除了构造函数,分配运算符C 11
- 返回对象如何与分配运算符一起工作
- 下标是否在分配运算符的右侧进行评估
- C++分配适用于已删除的分配运算符
- 用于删除复制/移动分配运算符的有效签名
- 使用新放置作为复制分配运算符不好吗?
- C++ - 父级中的 CRTP 分配运算符不起作用
- 复制派生类的分配运算符
- 未定义 Lambda 复制分配运算符
- 为什么标准在移动分配运算符中使用交换?
- 正确编写复制构造函数和分配运算符的方法