Должны ли вы написать «публичный виртуальный» или «виртуальный публичный» в виртуальном наследовании? - PullRequest
8 голосов
/ 29 марта 2011

На основании 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 ++?

Спасибо

Ответы [ 2 ]

14 голосов
/ 29 марта 2011

С ИСО / МЭК 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

Обратите внимание, что любой из них рекомендуется.

4 голосов
/ 29 марта 2011

Оба являются стандартными.Используйте в соответствии с местными правилами кодирования.

...