Dove stà l'inghippo?
Nessun inghippo. Semplicemente se metti {0} in automatico il compilatore mette a zero tutte le locazioni dell'array, con {33} il compilatore mette la prima locazione a 33 e il resto a zero. Se vuoi valori diversi li devi esplicitare locazione per locazione come faresti con un array normale.
Uno dei dati membro è un array in quanto conosco il suo numero di elementi tramite un tipo enumerato (al posto di 5 c'è AltraClasse::NumeroElementiArray), che potrebbe cambiare valore: col ciclo for il tutto era gestito in automatico, se invece devo passargli la lista di tutti gli zero, la cosa non è più automatica...
Come detto non serve passargli una lista di tutti zero: ne basta uno anche se l'array ha 2^n locazioni.