"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();
}
我似乎无法理解 someMethod
和 someOtherMethod
之间的区别(或者如果存在的话,就此而言)——两者似乎都是虚拟方法,并且都在 class继承自 B 的 es。
有人可以阐明这个 虚拟 class 语法吗?
A
是 class 名称 ,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 的残余,用于向后兼容,在使用时非常不受欢迎。
我一直在努力理解这样一段代码:
class A {
// some class definition
}
class B {
public:
virtual A *someMethod();
virtual class A *someOtherMethod();
}
我似乎无法理解 someMethod
和 someOtherMethod
之间的区别(或者如果存在的话,就此而言)——两者似乎都是虚拟方法,并且都在 class继承自 B 的 es。
有人可以阐明这个 虚拟 class 语法吗?
A
是 class 名称 ,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 的残余,用于向后兼容,在使用时非常不受欢迎。