假设:
class A
{
public:
A *Parent;
};
class B : public A
{
protected:
B *BParent;
};
但是A和B中的'Parent'和'BParent'都需要占用相同的内存空间! B 中的 BParent 实际上是一个 A,但对于所有 B 对象,其父对象始终也是一个 B,这样可以更轻松地访问 B-only 函数和变量,而无需将 Parent 全部转换为 B所有 B 和 B 继承类的时间,并且不需要在 A 中虚拟化 B 中可能需要的所有内容。
这可能吗? 跟随显然行不通,但是否有类似的行行之有效的方法?
class B : public A
{
protected:
union {
A::Parent ;
B *BParent;
};
};
我宁愿避免:
class A
{
public:
union {
A *Parent ;
class B *BParent ;
};
};
哪个可行。如果有一种方法可以使 BParent 在 A 中私有(private)化并仍然在 B 中访问它,那么我会使用后一种方法,以便它对从 A 继承的所有非 B 对象隐藏。
最佳答案
不完全确定您要的是什么,但可以试试。
我猜你想保存对继承但适用于派生类型的父类的某种访问。也许你正在寻找这个:
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; };
};
请注意,如果您想为两者使用相同的内存,那么它们必须相同。简单地转换指针应该做你想做的。
关于c++ - 在受控情况下更改基类变量的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26855796/