[英]C++ Add non-virtual static method in interface is normal?
我認為接口只能包含C++中的純虛函數。 但是,最近我的大學向我展示了以下代碼:
class IAddition {
public:
virtual bool MethodA() = 0;
static bool StaticMethodA(IAddition* interface) {
return interface->MethodA();
}
static std::string GetStr() {
return "A";
}
};
界面可以編譯但是感覺代碼怪怪的。 我不明白什么是接口的 static 方法? 這在 C++ 程序中是否很正常?
我以為接口只能包含C++中的純虛函數
C++ 標准沒有這樣的要求。
這在 C++ 程序中是否很正常?
是的(假設正常情況下您的意思是格式良好),這是一個有效的 C++ 程序。 我們可以使用虛擬成員 function 和 static 以及 class 中的非靜態成員函數。
正如評論中所指出的以及Jason Liam
在其他答案中指出的那樣blankettripod
語言沒有界面概念。 所以純粹從 C++ 標准的角度來看,這很好。
但是在很多C++實踐中最好的接口方式是:
class 或沒有任何字段且內部僅具有公共純虛函數的結構(必須實現且應該是虛擬的析構函數除外)。
另見Cpp 核心指南 I.25:Prefer empty abstract classes as interfaces to class hierarchies 。
因此,由於此 static 方法,您的IAddition
未能通過此定義。 許多開發人員對此不會有任何問題。
另一方面,在許多編碼標准規則更加嚴格和尊重的項目中,這不再是一個接口,應該修復。 有很多理由,例如,如果將此 API 移植到其他語言(如 Java 或 C#,其中接口是語言特性的一部分),那么這種額外的方法將是一個真正的技術問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.