在虚拟继承中应该写“public virtual”还是“virtual public”?

Posted

技术标签:

【中文标题】在虚拟继承中应该写“public virtual”还是“virtual public”?【英文标题】:Should you write "public virtual" or "virtual public" in virtual inheritance? 【发布时间】:2011-03-29 02:19:59 【问题描述】:

基于http://en.wikipedia.org/wiki/Virtual_inheritance

class Animal 

...
;

// Two classes virtually inheriting Animal:
class Mammal : public virtual Animal 

...
;

我还看到书籍使用以下语法,

class Mammal : virtual public Animal 

...
;

问题>哪一个是 C++ 标准?

谢谢

【问题讨论】:

仅供参考,这不是多重继承,这是您要询问的虚拟继承。 @Adam,当我们使用多重继承时,我们应该使用基类的虚拟继承。 【参考方案1】:

来自 ISO/IEC 14882:2003(E) - 10.1

可以在类定义中使用以下符号指定基类列表:

base-clause:
    : base-specifier-list

base-specifier-list:
    base-specifier
    base-specifier-list , base-specifier

base-specifier:
    ::opt nested-name-specifieropt class-name
    virtual access-specifier opt ::opt nested-name-specifieropt class-name
    access-specifier virtual opt ::opt nested-name-specifieropt class-name

access-specifier:
    private
    protected
    public

请注意,推荐使用任何一种。

【讨论】:

@q0987 - 谷歌搜索提到的标准名称,你应该能找到一个:) 这是语法,但语义是什么,意思是等价的?【参考方案2】:

两者都是标准的。使用本地编码约定所需的任何一种。

【讨论】:

以上是关于在虚拟继承中应该写“public virtual”还是“virtual public”?的主要内容,如果未能解决你的问题,请参考以下文章

c#类中定义public virtual ListItem SelectedItem get; 只能get不可以set,请问有啥方式可以set么?

C++多重继承与void*指针转换问题

继承与动态内存分配

C ++接口类继承自具体类是否合理?

这。与基地。对于继承的受保护的非虚拟方法?

VC6 编译错误error LNK2001: unresolved external symbol "public: virtual struct