C ++ - 从引用继承

时间:2013-08-09 05:06:15

标签: c++ inheritance reference

我希望A级能够从B级获得Hinerit而没有A具有B的自身实现

想法是在堆上创建一个B对象(使用B new)并将指针指向A. A之后会使用这个对象解决不适。

例如我想做的事情

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

3 个答案:

答案 0 :(得分:1)

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

3.7.5

  

成员子对象,基类子对象的存储持续时间   数组元素是其完整对象的元素

答案 1 :(得分:0)

如果B是在A之外创建的,那么在A被删除后不会自动删除B,除非你明确地删除,

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

B的生命周期取决于您的设计。你什么时候想要它被摧毁?如果有意义,你也可以制作B单身。

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();

答案 2 :(得分:0)

您不能从引用中继承,但是使用类似的方法,您可以到达一半:

#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