"virtual A* someMethod" 对比 "virtual class A* someMethod"

"virtual A* someMethod" vs "virtual class A* someMethod"

我一直在努力理解这样一段代码:

class A {
    // some class definition
}

class B {
    public:
        virtual A *someMethod();
        virtual class A *someOtherMethod();
}

我似乎无法理解 someMethodsomeOtherMethod 之间的区别(或者如果存在的话,就此而言)——两者似乎都是虚拟方法,并且都在 class继承自 B 的 es。

有人可以阐明这个 虚拟 class 语法吗?

Aclass 名称 class A 详细类型说明符 . 如果没有别的叫做 A,那么两者都指的是 class 叫做 A

如果还有其他东西(可能是函数或变量)称为 A,那么 A 的不合格使用将指代它。您需要详细的说明符 class A 来引用 class。如评论中所述,您也可以使用 class A 而无需事先声明 class;使用详细说明符足以将 class 名称引入最内层的命名空间。

与虚函数语法关系不大;两种形式都可用于指定类型,无论是作为函数的 return 类型还是在任何其他上下文中。

在 C 中,您过去必须编写 struct S 来引用结构。事实上有这个模式来处理它:typedef S struct {},它创建一个未命名的结构,然后通过类型别名给它命名 S。

C++ 保留了这种能力,但会自动为原始类型设置别名。在您的例子中,A 是正式名称 class A 的类型别名。当然,如果您有多个 A,自动别名将不起作用,但这也是一个很大的代码味道。

TL;DR:两者的功能 return 相同。它是 C 的残余,用于向后兼容,在使用时非常不受欢迎。