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