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

绝对不会提高可读性,反之亦然。范围前缀用于从外部使用或在可能存在解析歧义时使用,在范围内使用前缀本身只会混淆代码,实际上与 OOP 原则相矛盾。当您的实体在范围内不需要再次指出它时,它是完全多余的。关于 VA,我只能推测它的实现更简单。

于 2013-03-13T18:38:22.333 回答
1

不同之处在于第一个不是有效的 C++。

也许您的编译器接受它(因为该编译器对该语言有许多奇怪的“扩展”);但是如果您需要您的代码可移植到更多标准编译器,那么您将需要使用第二种形式。

为什么 VisualAssistX 插入IBase::

我猜这是一种错误的尝试,表明该函数会覆盖在IBase;中声明的函数。但我不知道为什么有人认为这可能是个好主意。

它只是一种提高可读性的“代码风格”吗?

相反; 这个虚假声明使函数看起来像 的成员IBase,而实际上它是 的成员Base。这种混乱会降低可读性。

于 2013-03-13T18:43:36.777 回答