2015-05-07 6 views
-3

У меня есть библиотека классов, и она включает в себя объект-элемент member1 из другого класса Shelf.C++ 11: как инициализация списка назначает значения в определенном пользователем объекте?

Шельф класса есть несколько переменных, скажем:

class Shelf { 
int height; 
int width; 
int materialType; 
String shelfName; 
} 

В настоящее время в библиотеке, я хочу, чтобы инициализировать объект член shelf1 в объявлении библиотеки:

Shelf shelf1{100, 200}; 
Shelf shelf2{100, "fiction"}; 

Могут ли они работать, и как Инициализация списков работает для порядка переменных?

[Обновить] Этот код предназначен для объяснения моего вопроса (у меня есть аналогичный код в моем реальном мире, но это слишком сложно поставить здесь, поэтому я упрощаю свой вопрос).

+0

Что такое 'String'? В конце определения класса есть недостающая точка с запятой. Ни одна из инициализаций, которые вы опубликовали, не компилируется. – Praetorian

+0

@Praetorian, извините, я не имел ввиду, что он скомпилируется. Я ввел некоторые объяснения в свой первоначальный пост. – user1914692

ответ

3

Если ваш класс является aggregate, то переменные инициализируются в соответствии с порядком объявления в вашем классе. Для того чтобы ваш класс являлся агрегированным (и имел возможность использовать такую ​​прямую инициализацию списка), одним из требований является то, что все члены должны быть public (спасибо @Praetorian за это), иначе ваш класс не является совокупностью, а код не будет компилироваться. Таким образом, если предположить, что члены public,

Shelf shelf1{100, 200}; 

инициализирует height с 100 и width с 200.

Shelf shelf2{100, "fiction"}; 

является ошибкой во время компиляции, а второй элемент width не является С-строка.

Подробнее here.

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

  • Нет связанных вопросов^_^