2010-05-26 2 views
0

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

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

//definition 
tStruct1 struct1{1}; 

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

struct tStruct2:tStruct1{ 
    int b; 
}; 

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

tStruct2 struct2{ ????? }; 

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

ответ

4

Во-первых, typedef для структуры ничего не меняет, он вводит альтернативное имя для типа. Вы все равно можете наследовать его, как обычно.

Синтаксис Type identifier{params} для определения - синтаксис C++ 0x для нового uniform initialization. В pre-C++ 0x у вас есть два варианта инициализации пользовательских типов.

Совокупные Инициализационные

Агрегаты POD типы и массивы стручки или встроенных типов. Они могут быть инициализированы с помощью списков инициализатора с фигурными скобками:

struct A { 
    int i; 
}; 
struct B { 
    A j; 
    int k; 
}; 

B b = {{1}, 2 }; 

Это описано более подробно в этом InformIT article.

Как уже отмечалось, это работает только для 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); 

Конструкторы покрыты более подробно в this InformIT article.

Смежные вопросы