簡體   English   中英

當從抽象類繼承以創建另一個抽象類時,我應該重新聲明所有虛函數嗎?

[英]When inheriting from an abstract class to create another abstract class should I redeclare all virtual functions?

在 C++ 中工作時,這更像是一個首選的樣式問題。 我正在尋找這方面的首選標准。

假設我有一個接口 A

class AInterface {
public:
    virtual ~AInterface() = default;
    virtual void a() = 0;
};

然后我有另一個接口 B 建立在 A 之上

class BInterface : public AInterface{
public:
    virtual void b() = 0;
    virtual void otherb() = 0;
};

我的問題是我應該像這樣重新聲明 B 中 AInterface 的所有虛函數嗎?

class BInterface : public AInterface{
public:
    virtual void a() = 0;
    virtual void b() = 0;
    virtual void otherb() = 0;
};

不,您不必這樣做。

...你不應該,因為這是沒有好處的不必要的重復。 如果這樣做,至少使用override關鍵字以避免聲明中的不匹配。

想象一下,您將基數更改為

class AInterface {
public:
    virtual ~AInterface() = default;
    virtual void a(int) = 0;
};

並且您忘記更新BInterface ,然后BInterface ,現在您在BInterface中有一個不打算使用的void a() 但是,如果您有override

class BInterface : public AInterface{
public:
    virtual void a() override = 0;
    virtual void b() = 0;
    virtual void otherb() = 0;
};

您會收到編譯器錯誤,因為在上述重構之后void a()不會從其基礎覆蓋方法。

如果您打算更改基類的功能,您只會在后續類中重新聲明/定義虛函數。 也就是說,您給出的示例都是純虛擬類,因此您無法實例化它們。 但總的來說,繼承的要點之一是您不必不斷地重新聲明對派生類執行相同操作的函數。

暫無
暫無

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

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