簡體   English   中英

用C ++構建接口

[英]Building interface in c++

請考慮以下代碼:

class IMyInterface
{
private:
    IMyInterface();
    ~IMyInterface();
public:
    virtual void func1();
    virtual void func2(const SerialPortParameters);
    virtual int func3(unsigned char *, int bufferSize, int);
};

在C ++中聲明接口可以嗎? 我將構造函數放在專用部分,這樣沒人可以從中創建對象,並且所有方法都是虛擬的。 這是在c ++中構建接口的標准方法嗎?

而且它只有一個頭文件。 由於它是一個接口,因此沒有實現,因此我認為無需創建cpp文件。 我對嗎?

謝謝你的幫助。

在C ++中聲明接口可以嗎? ...這是在c ++中構建接口的標准方法嗎?

不,不是。 你應該修復幾件事

class IMyInterface
{
public:
    virtual ~IMyInterface() {}
    virtual void func1() = 0;
    virtual void func2(const SerialPortParameters) = 0;
    virtual int func3(unsigned char *, int bufferSize, int) = 0;
};
  • 您根本不需要構造函數
  • 制作一個空的公共虛擬析構函數(私有構造函數/析構函數是一個壞主意,因為它阻止了繼承)
  • 使接口功能完全虛擬

這將不起作用,原因有兩個:

  • 將構造函數設為私有可確保沒有人能夠實例化您的接口。 甚至沒有派生類。
  • 您沒有將析構函數virtual -接口必須這樣做。

除了將析構函數之外,所有函數都標記為純虛的 ,而不是將構造函數設為私有。

另外,請確保您的類使用public virtual從“接口”繼承。 否則,層次結構深處的某些類可能最終會通過多個路徑繼承相同的成員。

您根本不需要構造函數,因為不會實例化接口。 您還應通過以下方式使這些方法(析構函數除外)成為pure virtual 使這些功能pure vitual ,您將創建一個無法實例化的abstract class

public:
    virtual ~IMyInterface(){}
    virtual void func1()=0;
    virtual void func2(const SerialPortParameters)=0;
    virtual int func3(unsigned char *, int bufferSize, int)=0;

暫無
暫無

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

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