可能重複:
How do you declare an interface in C++?
Interface as in java in c++?相當於C++中的Java接口?
我是一個Java程序員學習C++,我想知道是否有類似的東西在C++ Java接口,即類,其他類可以實現/擴展多個。 謝謝。 p.s.告訴我,如果我做錯了什麼,請在這裏新建一個。
可能重複:
How do you declare an interface in C++?
Interface as in java in c++?相當於C++中的Java接口?
我是一個Java程序員學習C++,我想知道是否有類似的東西在C++ Java接口,即類,其他類可以實現/擴展多個。 謝謝。 p.s.告訴我,如果我做錯了什麼,請在這裏新建一個。
在C++中,只包含純虛方法的類表示一個接口。
實施例:
// Define the Serializable interface.
class Serializable {
// virtual destructor is required if the object may
// be deleted through a pointer to Serializable
virtual ~Serializable() {}
virtual std::string serialize() const = 0;
};
// Implements the Serializable interface
class MyClass : public MyBaseClass, public virtual Serializable {
virtual std::string serialize() const {
// Implementation goes here.
}
};
您需要**虛擬繼承**來模擬Java接口實現。 FTFY。 – 2012-08-14 05:30:54
@ Cheersandhth.-Alf沒錯。感謝您的修復。 – StackedCrooked 2012-08-14 05:35:30
-1,它是*抽象類*,而不是* interface *。你不能通過它的* interface *擁有對象,即* interface *不能擁有公共析構函數。 (除非它是'IDestructible' *接口*)。 – Abyx 2012-08-14 08:51:44
要模擬的Java interface
,可以使用僅具有純虛函數普通基地。
您需要使用虛擬繼承,否則您可能會得到重複繼承:在C++中,同一個類可以多次作爲基類。這意味着在這種情況下訪問這個基類將是不明確的。
C++確實不提供的Java interface
的完全等效:在C++中,覆蓋一個虛擬函數只能在派生類與虛擬函數聲明的類的來完成,而在Java中,置換器用於方法在interface
可以在基類中聲明。
[實施例:
struct B1 {
void foo();
};
struct B2 {
virtual void foo() = 0;
};
struct D : B1, B2 {
// no declaration of foo() here
};
D
繼承太函數聲明:B1::foo()
和B2::foo()
。
B2::foo()
是純虛擬的,所以D::B2::foo()
也是; B1::foo()
不會覆蓋B2::foo()
,因爲B2
不是派生類B1
。
因此,D
是一個抽象類。
--end示例]
反正爲什麼你會模仿Java的C++中任意限制?
編輯:添加示例澄清。
C++支持完整的[多繼承](http://en.wikipedia.org/wiki/Multiple_inheritance),所以在Java和類之間沒有區別。如果您使用所有純虛擬方法創建類,那麼它就等同於Java接口。 – DaoWen 2012-08-14 04:57:35
僅具有純虛擬成員函數的抽象類。 – oldrinb 2012-08-14 04:57:58
還要考慮VC++的'__interface'關鍵字。檢查MSDN。 – MasterMastic 2012-08-14 04:58:57