"虚拟A*someMethod"vs"虚拟类A*someMethod"

fst*_*nis 0 c++ polymorphism

我一直试图理解一段代码如下:

class A {
    // some class definition
}

class B {
    public:
        virtual A *someMethod();
        virtual class A *someOtherMethod();
}
Run Code Online (Sandbox Code Playgroud)

我似乎无法理解上的差异(或者如果存在,对于这个问题)之间someMethod和someOtherMethod-都似乎是虚拟的方法和两者都在课堂上重写,从继承B.

有人会对这个虚拟类语法有所了解吗?

Mik*_*our 5

A是类名,class A是精心设计的类型说明符.如果没有其他任何调用A,则两者都引用被调用的类A.

如果有其他东西(可能是一个函数或变量)被调用A,那么不合格的使用A会引用它.你需要精心设计的说明符class A来引用这个类.正如评论中所提到的,您也可以在class A没有此类声明的情况下使用; 使用详细说明符足以将类名引入最里面的命名空间.

它与虚函数语法几乎没有关系; 两种形式都可用于指定类型,无论是作为函数的返回类型还是在任何其他上下文中.

  • 此外,如果没有先前的'A`声明,精心设计的类型说明符将名称`A`引入声明的最内部封闭命名空间范围. (2认同)
  • @fstanis是的,但不是`someMethod`,如果之前没有在程序中声明`A`. (2认同)