C++-从引用继承

C++ - Inherit from reference

本文关键字:继承 引用 C++-      更新时间:2023-10-16

我希望类A从类B继承,而不需要A自己实例化B

这个想法是在堆上创建一个B对象(使用B new),并将指针指向A。之后,A将使用此对象来解决继承问题。

这是我想做的一个例子:

B* b = new B();
b->myBmethode();
{
  A(b);
  A.myBmethode();
} // A destroyed
b->myBmethode();
delete b;

不,这是不可能的(如果我正确理解你的问题)。

3.7.5

成员子对象、基类子对象和数组元素是其完整对象的元素

如果B是在A之外创建的,则在A被删除后,B不会自动删除,除非你明确这样做,

创建一个接口IA,让A和B都实现该接口。对于B,只需将所有实际实现委托给B即可。

B的生命周期取决于您的设计。你希望它什么时候被销毁?如果有意义的话,您也可以将B设为singleton。

class IA {
  virtual doA() = 0;
}
class A: public IA {
   virtual doA();
}
class B: public IA {    
B(A&a);    
virtual doA(){
   a.doA();
}
private:
   A&a;
}
//init
A* a = A::getInstance();
B *b = new(*a) ;
b->doA();

您不能从引用继承,但有了这样的东西,您可以达到一半:

#include<functional>
...
struct A : std::reference_wrapper<B>{
// using std::reference_wrapper<B>::reference_wrapper; // inherit constructor
};

https://en.cppreference.com/w/cpp/utility/functional/reference_wrapper