Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “之间有什么区别吗?”;虚拟无效IBase::Foo“;及;虚拟虚空“Foo”;?_C++_Visual C++ - Fatal编程技术网

C++ “之间有什么区别吗?”;虚拟无效IBase::Foo“;及;虚拟虚空“Foo”;?

C++ “之间有什么区别吗?”;虚拟无效IBase::Foo“;及;虚拟虚空“Foo”;?,c++,visual-c++,C++,Visual C++,我使用了VisualASistX实现虚拟方法选项,它生成了: class Base: public IBase { public: Base(void); ~Base(void); virtual void IBase::Foo(); 我注意到我可以省略IBase,而程序仍然是这样编译的: virtual void Foo(); 如果这是相同的代码?为什么VisualASistX插入IBase::?它只是一种“代码风格”来提高可读性吗 谢谢绝对不会提高可读性,

我使用了VisualASistX
实现虚拟方法
选项,它生成了:

class Base: public IBase
{
public:
    Base(void);
    ~Base(void);
    virtual void IBase::Foo();
我注意到我可以省略
IBase
,而程序仍然是这样编译的:

    virtual void Foo();
如果这是相同的代码?为什么VisualASistX插入
IBase::
?它只是一种“代码风格”来提高可读性吗


谢谢

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

如果从多个具有冲突虚拟函数的基类派生,这将有助于解决歧义。我怀疑这就是VisualASistX选择插入
IBase::
的原因

IBase::
是否有助于提高可读性还有争议。我个人觉得这会分散我的注意力


此外,语法甚至不是标准C++。请参阅讨论和建议如何使用标准的、可移植的C++ ++ < /p> < p>解决多重继承问题。区别在于第一个不是有效的C++。 也许您的编译器接受它(因为该编译器对该语言有许多奇怪的“扩展”);但是,如果您需要将代码移植到更标准的编译器,则需要使用第二种形式

为什么VisualASistX插入
IBase::

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

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


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

我认为在类声明中插入名称空间/类名会降低可读性。裸函数名称很好。这是不是有效的C++?@ RICHARJ.RSSIII:我不能用<代码> G++4.7.2:<代码>错误:不能在“D”/代码> @ RICHARJ.R.S.sixi好捕获,声明成员函数“B1::FoO”,尽管我会严厉惩罚Stroustrup,因为它为C++.@ RICHARJ.R.Ssiii增加了多继承支持:但是,MSVC-C++,这可能只是与OP相关的。