Моя текущая ситуация выглядит следующим образом. Это более или менее простой случай наследования, и у меня есть несколько вопросов по этому поводу.
У меня есть абстрактный класс (= он имеет чисто виртуальные функции) с двумя переменными foo_
и bar_
. foo_
устанавливается параметром в конструкторе. bar_
по умолчанию должно быть 1000 для большинства подклассов, но я хочу, чтобы один конкретный класс переопределил его до 50000.
Вот фрагмент кода:
class Base {
protected:
const int foo_;
const int bar_;
public:
Base(int foo) : foo_{foo}, bar_{1000} {}
}
class Derived : public Base {}
Во-первых, один быстрый вопрос:Лучше ли инициализировать bar_
в списке инициализации, как я делал в примере, или делать это сверху, где переменная была объявлена как const int bar_{1000};
?
Второй быстрый вопрос: можно ли использовать{}
в списках инициализации или следует использовать ()
?
Как правильно написать конструктор для класса Derived? Я хочу специально вызвать конструктор, который я определил для Base, а также использовать список инициализации, чтобы установить bar_
на 50000.
Моя идея была примерно такой:
Derived(int foo) : Base(foo), bar_{50000} {}
РЕДАКТИРОВАТЬ: После небольшой попытки я заметил, что изменение bar_ в списке конструкторов Derived, по-видимому, невозможно, потому что "bar_" is not a nonstatic data member or base class of class "Derived"
.