5

VisualAssistXImplement Virtual Methodsオプションを使用したところ、以下が生成されました。

class Base: public IBase
{
public:
    Base(void);
    ~Base(void);
    virtual void IBase::Foo();

IBase省略しても、プログラムは次のようにコンパイルできることに気付きました。

    virtual void Foo();

これが同じコードなら?VisualAssistX が挿入されるIBase::理由 読みやすさを向上させるのは一種の「コードスタイル」ですか?

ありがとう

4

3 に答える 3

2

これは、競合する仮想関数を使用して複数の基本クラスから派生する場合、あいまいさを解決するのに役立ちます。これが、VisualAssistX が を挿入することを選択した理由だと思いIBase::ます。

IBase::読みやすさの向上に役立つかどうかは議論の余地があります。個人的には邪魔だと思います。

さらに、構文は標準の C++ でさえありません。議論と、標準の移植可能な C++ を使用して多重継承の問題を解決する方法の提案については、同名の純粋仮想関数の個別の実装を参照してください。

于 2013-03-13T18:41:39.603 に答える
1

違いは、最初のものは有効なC++ではないということです。

おそらくあなたのコンパイラはそれを受け入れます(そのコンパイラは言語に対して多くの奇妙な「拡張」を持っているので)。ただし、コードをより標準的なコンパイラに移植できるようにする必要がある場合は、2番目の形式を使用する必要があります。

VisualAssistXが挿入するIBase::理由

IBase関数が;で宣言されたものをオーバーライドすることを示すのは誤った試みだと思います。しかし、なぜ誰かがそれが良い考えだと思ったのか私にはわかりません。

読みやすさを向上させるのは、一種の「コードスタイル」ですか?

それどころか; この偽の宣言により、IBase実際にはのメンバーである場合、関数はのメンバーのように見えますBase。この種の混乱は、読みやすさを低下させます。

于 2013-03-13T18:43:36.777 に答える
1

可読性を向上させることは絶対にありません。スコープ プレフィックスは、外部からの使用、または解決のあいまいさが存在する可能性がある場合に使用されます。スコープ自体の内部でプレフィックスを使用すると、コードが難読化され、実際には OOP の原則に反します。エンティティがスコープ内で再びそれを示す必要がない場合、それは完全に冗長です。VAに関しては、実装がより簡単だったと推測することしかできません。

于 2013-03-13T18:38:22.333 に答える