簡體   English   中英

在受控情況下更改基類變量的類型?

[英]Change type of base class variable in controlled situation?

假設:

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中虛擬化可能在B中所需的所有內容。

這可能嗎 ? 繼顯然行不通,但有類似的東西, 的工作?

class B : public A
    {
    protected:
    union {
      A::Parent ;
      B *BParent;
      };
    };

我寧願避免:

class A
{
public:
union {
  A *Parent ;
  class B *BParent ;
  };
};

這將工作。 如果有一種方法可以在A中將BParent設為私有並仍然在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; };
};

請注意,如果您想為兩者使用相同的內存,則它們必須相同。 只需轉換指針即可完成您想要的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM