簡體   English   中英

C++ - 從參考繼承

[英]C++ - Inherit from reference

我希望 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 之外創建的,則 B 不會在 A 被刪除后自動刪除,除非你明確這樣做,

創建一個接口 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();

您不能從引用繼承,但是使用這樣的東西,您可以做到一半:

#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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM