1

我希望 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;
4

3 回答 3

1

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

3.7.5

成员子对象、基类子对象和数组元素的存储时长为其完整对象的存储时长

于 2013-08-09T05:13:26.380 回答
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();
于 2013-08-09T05:13:19.620 回答
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

于 2020-01-10T07:42:27.647 回答