与 dynamic_cast 相反的操作

opposite operation to dynamic_cast

我有一个基数 class 和导数 class,例如:

class Base {
 public:
  Base();
  virtual doSomthing();
};

class Derivative : class Base {
 public:
  Derivative();
  virtual doSomthing();
};

我知道如果我想在运行时从父亲更改为儿子我会做

Derivative& newDer = dynamic_cast<Derivative&>(baseInstance)

我的问题是如何做相反的操作- 从儿子变爸爸?

不需要特定的转换操作。任何 Derivative& 都可以自动传递给 Base&,如果它们确实具有像

中那样的关系
class Derivative : public Base {
                // ^^^^^^
 public:
  Derivative();
  virtual doSomthing();
};

假设您试图从全球 public 范围内做到这一点。


my question is how I can do the opposite operation - change from son to the father?

继承关系需要在使用的范围内访问。您的示例具有 private 继承,并且它不会在 public 范围内工作。

and 它将在 Derivative 内部 class 范围内与任何 class 成员函数或 friended function/class 一起工作。