Допустим, у нас есть класс Base
и класс Derived
:
class Base {
public:
Base(int x) : var1(x)
int process(){
//return some function of var1
}
protected:
int var1;
}
class Derived : public Base {
Derived(int init) : Base(init), a(process()), b(process()) {}
protected:
int a;
int b;
}
Другими словами, когда мы инициализируем Derived
, мы предполагаем, что конструктор Base
вызывается первым, которая инициализирует переменную-член var1
в базовом классе значением init
, а затем переменные-члены a
и b
инициализируются с помощью функции process()
, которая зависит от значения, установленного на var1
.
Обратите внимание, что для правильности этого кода нам необходимо убедиться, что Base(init)
вызывается до a(process())
и b(process())
.
Допустимо ли в C ++ предполагать, чтовышеуказанный порядок инициализации будет сохранен?Или мне нужно изменить конструктор Derived
на следующий, чтобы гарантировать порядок инициализации?
Derived(int init) : Base(init) {
a = process();
b = process();
}