codice:
if ( d.display[i*dim+j] ) // Se il valore è true, l'espressione è true e andrà in then, altrimenti in else
os<<'1';
else // Se non è true, non serve un secondo if per sapere che è false... :)
os<<'0';
Questo è più che sufficiente... 
Perchè stampa tutti 0... Guarda, ad esempio, la "set()":
codice:
for (int i=0; i<n; i++){
for (int j=0; j<n; j++){
if (ch=='-' && i==media)
display[i*n+j]=true;
if (ch=='|' && j==media)
display[i*n+j]=true;
if (ch=='/' && i==(n-j-1))
display[i*n+j]=true;
else
return false;
}
}
Se il carattere passato è '-', comincierà il controllo. Siamo sulla prima cella (0,0), il primo if non viene soddisfatto.
Va a vedere il secondo if, non viene soddisfatto.
Va a vedere il terzo if, non viene soddisfatto quindi ritorna false... ma come? E tutte le altre celle non le controlliamo? Ci fermiamo alla prima? 
Ricorda che gli "else" non sono obbligatori... se il flusso logico non ha bisogno di una "alternativa", semplicemente non metterla.
Ciao.