Во-первых, typedef
для структуры ничего не меняет, оно только вводит альтернативное имя для типа. Вы все еще можете наследовать от него как обычно.
Синтаксис Type identifier{params}
для определений - это синтаксис C ++ 0x для новой равномерной инициализации . В pre-C ++ 0x у вас есть два варианта инициализации пользовательских типов.
Совокупная инициализация
Агрегаты - это POD типов и массивов POD или встроенных типов. Их можно инициализировать с помощью списков инициализаторов с фигурными скобками:
struct A {
int i;
};
struct B {
A j;
int k;
};
B b = {{1}, 2 };
Подробнее об этом рассказывается в этой статье InformIT .
Как уже отмечалось, это работает только для POD-типов и, следовательно, не работает, когда в игру вступает наследование. В этом случае вы должны использовать
Пользовательские конструкторы
Они позволяют довольно свободно инициализировать пользовательские типы, определяя специальные функции-члены:
struct A {
int i;
A(int number) : i(number) {}
};
struct B : A {
int j;
B(int number1, number2) : A(number1), j(number2) {}
};
B b(1, 2);
Конструкторы более подробно описаны в этой статье InformIT .