c++子类访问
C++ subclass access
我有一个由许多子类继承的主类。继承的主类必须至少在继承中受到保护,以防止非派生类通过子类使用或修改它。
是否有一种方法允许不同的子类修改彼此继承的主类变量,但不允许对主类的公共访问?如果不使用friend关键字,这将产生复杂的代码。
在完整上下文中:
我有一个节点类,添加/删除相对于它的节点。有一个依赖于节点类的列表类(和子类),这意味着如果节点也破坏了类列表,它就不能被公开访问。Node还必须能够被列表助手类访问。
为了确保发生这种情况,我在另一个类accessnode中实现了protected下的node。所有需要节点权限的类都将accessnode继承为受保护的(因此accessnode类不是公共的)。这意味着helper和list类/子类都可以访问node。
问题是,为了让TemplateList通过只读方式复制CharList (TemplateList的子类),它需要访问CharList的节点(以避免使用CharList的迭代器)-问题是,节点是受保护的(以防止外部的,非accessnode的干扰),实现一个授予访问节点的公共方法会破坏这一点。
我需要的是横向继承,这样accessnode类型的所有子类都可以访问彼此的节点,而无需公开授予访问权。
简而言之:(Protected) AccessNode内的节点。
TemplateList: Protected AccessNode.
CharList: Protected AccessNode.
TemplateList需要访问CharList的AccessNode。
AccessNode/Node不能是public
免责声明:这与这个特定的问题无关,但更多的是关于导致你今天的这个问题和其他问题的一般问题。
我想你找错人了。我的感觉是,您提供了对列表内部节点的访问,然后期望节点类型本身保护列表免受粗心的修改(即那些可能破坏列表不变量的修改)。这样做,您正在为一个简单得多的问题寻求一个复杂的解决方案:首先不要让用户访问节点。 如果您看一下STL提供的关于容器,特别是列表的方法,事情就会变得简单得多。该列表是根据一些未知的不可访问节点来实现的。这些节点操作上的访问说明符根本不重要,因为用户不能访问对象本身,所以它们可以是公共的。用户通过不同的代理(iterator
, const_iterator
类型)访问列表的内容,该代理只提供那些不能扰乱列表状态的操作。
我不太明白你所说的"子类改变彼此继承的主类变量"是什么意思。
如果只允许派生类访问基类成员变量,则将成员变量设置为protected
。和/或添加protected
访问器功能
static protected
成员变量。所有实例将共享相同的成员变量。
如果你能把问题说清楚就好了。
您总是可以在顶级类中添加protected
访问器函数,但与其这样做,不如重新考虑设计。
EDIT:具体示例:
class Base
{
protected:
struct State
{
int m1;
char m2;
State(): m1(), m2() {}
};
State state_;
static State& state( Base& o) { return o.state_; }
};
class Derived
: public Base
{
public:
void foo( Base& other )
{
Base::State& baseState = state( other );
// Blah blah.
}
};
int main()
{
Derived o;
// Blah blah.
}
干杯,hth。
- 通过指向指针数组的指针访问子类的属性
- 如何访问子类的新成员函数?
- 从父类的向量访问子类函数,而无需向下转换
- 从C++中的父类实例访问子类方法
- 如何在 getter 的父类中初始化变量的情况下访问子类中的变量
- 如何从父类访问子类
- cpp 从需要超类对象的函数访问子类对象方法
- 从超类访问子类
- C++ 访问子类中的数据
- 我调用的函数不是通过多态访问子类的函数
- 带模板的继承(访问子类成员函数内父类的变量和对象)
- 从父类访问子类属性
- 可视化 当基类和子类具有相同的对象名称但类型不同时,如何访问子类的数据成员。在C++
- 如何访问子类成员
- 当子对象引用被分配给父对象指针时,为什么不能访问子类
- 使用指向无法dynamic_cast的基 abstact 类的指针访问子类成员
- 在c++中从超类数组中访问子类方法
- 通过基类指针访问子类的成员函数
- 在c++中通过父类访问子类的元素
- 从父类访问子类