簡體   English   中英

C++ 在界面中添加非虛擬static方法正常嗎?

[英]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.

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