簡體   English   中英

C ++中的Java接口

[英]Java Interface in C++

第一次發布,所以請保持溫柔!

我有一個像這樣的界面

public interface I_Hospital{
    public void registerObserver(I_Person p);
    public void removeObserver(I_Person p);
    public void notifyObservers();
    public void addWard(Ward ward);
}

現在,如果要在C ++中重新創建它,執行以下操作是否正確:

IHospital.h

Class IHospital{
    public:
    virtual void registerObserver(IPerson p) = 0;
    etc...
}

這是在C ++接口上的正確實現嗎?

謝謝,帕特里克

是的,您將接口定義為包含純虛函數(其純凈度由= 0表示)的抽象類 ,就像這樣。 像Java的接口一樣,抽象類不能直接實例化,而必須由覆蓋並實現純虛函數的具體類派生。

有幾個問題:

  • 介紹班級的關鍵字是class而不是Class
  • 您需要通過引用IPerson &而不是值來獲取IPerson參數; 抽象類不能按值傳遞。 Ward論點可能也是如此。 即使不是抽象的,您也可能希望此類引用一個病房(就像Java版本一樣),而不是復制一個病房。 與Java不同,除非將類對象傳遞給函數,否則將傳遞對象的副本,除非您特別要求通過引用傳遞該對象。

Java接口提供了必須由從該接口繼承的類覆蓋的方法。 這類似於擁有一個純虛擬方法的抽象C ++基類,就像您所展示的那樣。 是的,那是正確的實現。 還要注意,在基類中應具有虛擬析構函數,以便刪除指向派生實例的基類指針可以正確地調用派生和基類析構函數。

是的,這與Java的接口概念非常接近。

請注意,C ++實際上沒有將接口的概念與類分開的概念。 但是,對於C ++開發人員來說,通常是將沒有數據成員並且其方法都完全是虛擬的類作為接口來引用-這是程序員(而不是語言本身)做出的區分。

暫無
暫無

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

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