禁止用户创建对象,但允许某些类
Forbid users to create objects but allow some classes
我有以下两个类。
Class A
{
proctected:
A(){}
};
Class B
{
push_new_A_into_v();
vector<A> v;
};
函数
push_new_A_into_v();
不会编译,因为 A 的构造函数受到保护。使 B 从 A 继承将无济于事,因为该方法会创建一个全新的 A(为什么受保护的构造函数在此代码中引发错误?
A的构造函数受到保护的原因是使用户无法创建类型 A 的对象。
如何在用户仍无法创建 A 类型的对象时使该方法正常工作?
除了 user2913094 的答案:
如果仅仅为了允许构造而给予B
完整的友谊似乎不可接受,您可以添加一个需要构造令牌的构造函数,该令牌只能通过B
获得:
class A {
public:
class ConstructionToken {
private:
ConstructionToken();
friend class B;
};
A(ConstructionToken const&);
protected:
A();
};
请注意,令牌类是完全空的,但由于只有B
可以访问其私有构造函数,这基本上阻止了用户直接调用A
的公共构造函数。
这允许更细粒度的访问控制,但缺点是它需要在A
上引入额外的构造函数重载。
class A {
friend class B;
...
相关文章:
- 使用某些用户输入向量[x]++增加向量的索引
- 如何根据用户输入"weighted"随机数生成,使某些数字优先于其他数字?
- 如何从用户输入中获取某些值并忽略其他值
- 如何在函数中暂停程序,直到用户在窗体上执行某些操作
- 使用用户定义的类来计算某些类似的类模板
- 如何创建一个C++的用户定义类,以便该类的 std::vector 不包含该类的某些成员
- 使用提示用户输入笛卡尔平面中某些点的x-y坐标(浮点类型)的函数
- 如何限制用户只能选择某些驱动器
- 在我的Matrix4类中使用某些用户定义的运算符的操作正在返回高值的高值
- 使用 Wix 安装程序,当用户在编辑框中输入某些内容时进行安装时,如何在安装过程中覆盖配置文件
- 某些用户的 OpenProcess 访问被拒绝
- 禁止用户创建对象,但允许某些类
- 防止用户在 c++ 中输入某些字符
- 我需要从用户输入中找到某些数字的位置
- 是否可以使用用户定义的I / O操纵器操作某些文本
- 如何在其他类中使用用户定义的类型,这些类型是在某些类中定义的
- 限制用户输入某些字符
- 在vs2010中调试某些c++函数时,c++用户定义函数没有调用
- 如何制作一个当用户按下某些键时改变颜色的正方形
- 为什么我的用户定义函数的 return 语句在某些情况下不起作用?