c++ - 在受控情况下更改基类变量的类型?

标签 c++ class casting borland-c++

假设:

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/

相关文章:

c++ - 如何从txt文件中读取数字并确保它们存在

每个可用于匿名集合的 C++?

jQuery 选择带有 ID 和类的 div

c++ - 如何获取当前持有的变体类型,并定义该类型的新变量

c++ - 尝试在 C++/CLI 项目中调用 GetAsyncKeyState() 时出错

python - pandas:通过将类方法应用于另一列(包含类)来填充列

c++ - 为要在 1 类中使用的结构成员分配常量值

java - Java 中子类和集合之间的类转换异常问题

oop - Actor 阵容永远不会成功

sql - 从 "YYYY-MM"varchar 自动转换到 PostgreSQL 中的日期