假设:
class A
{
public:
A *Parent;
};
class B : public A
{
protected:
B *BParent;
};
但A和B中的'Parent'和'BParent'都需要占用相同的内存空间! B'中的BParent实际上是A,但是对于所有B对象,父对象也总是B,并且它更容易访问仅B函数和变量,而不需要将Parent转换为B所有所有B中的时间和B继承类的时间,并且不需要在A中虚拟化所有可能需要的东西。
这可能吗? 以下显然不起作用,但有哪些类似 的工作?
class B : public A
{
protected:
union {
A::Parent ;
B *BParent;
};
};
我宁愿避免:
class A
{
public:
union {
A *Parent ;
class B *BParent ;
};
};
哪个会奏效。如果有一种方法可以在A中使BParent为私有并仍然在B中访问它,那么我会使用后一种方法,这样它就会对从A继承的所有非B对象隐藏。
答案 0 :(得分:1)
不完全确定你要求的是什么,但现在就去了。
我猜你想要保存对继承的父级的某种访问权限但是适用于派生类型。也许你正在寻找这个:
template <class T>
class A
{
private:
T *parent;
};
class B : public A<B>
{
};
但似乎你想要保留A和B ......
所以也许你真正想要的是:
class A
{
protected:
A *AParent() { return parent; }
protected:
A *parent;
};
class B : public A
{
protected:
B *BParent() { return (B*)parent; };
};
请注意,如果要为两者使用相同的内存,则它们必须相同。简单地投射指针应该做你想要的。