使用带有类声明的virtual关键字

Aam*_*mir 1 c++ virtual

我在接受采访时被问及在C++中使用带有类声明的virtual关键字的用法是什么,我回答说虚拟关键字不能与C++中的类声明一起使用.面试官说这是可能的,并让我稍后进行测试.

现在我已经自己检查了一下,我已经知道这是可能的,这不是编译器错误.事实上,当我使用Visual C++编译器执行类似的操作时:

virtual class Test
{
   int i;
};
Run Code Online (Sandbox Code Playgroud)

我得到一个编译器警告"警告C4091:'virtual':当没有声明变量时,在'Test'的左边忽略".我还没有发现这个警告意味着什么,以及虚拟关键字的用法是什么.如果没有有用的用法,那么为什么首先允许这样做,为什么这不是编译器错误.

Sea*_*ean 6

从另一个类派生时可以使用virtual:

class Foo : public virtual Bar
{
}
Run Code Online (Sandbox Code Playgroud)

这用于避免在使用多重继承时具有相同基类的多个版本.维基百科有一篇关于这个主题的好文章.


Jam*_*kin 6

这是VC++中的一个错误.Comeau和gcc都拒绝代码.

  • Aamir,你似乎有两个问题:(1)面试官是什么意思?(2)为什么这是合法的语法?我想大多数人都试图回答(1)而不是(2). (2认同)