структуры, наследование и определение - PullRequest
0 голосов
/ 26 мая 2010

Мне нужно помочь со структурами, наследованием и определением.

//define struct
struct tStruct1{
    int a;
};

//definition
tStruct1 struct1{1};

и наследование

struct tStruct2:tStruct1{
    int b;
};

Как я могу определить это в строке объявления?

tStruct2 struct2{ ????? };

Еще один вопрос, как я могу использовать наследование для структур, определенных с помощью typedef struct?

1 Ответ

4 голосов
/ 26 мая 2010

Во-первых, 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 .

...