O Zé pergunta no blog dele e como não está funcionando no momento eu respondo aqui, espero que o trackback esteja habilitado por lá…
strutcs: Basicamente para manter compatibilidade com C. Tem que ser levado em consideração que C++ é uma linguagem multi-paradigma, é OO e Procedural, e numa linguagem procedural você vai precisar normalmente de estruturas de dados customizadas para serem manipuladas por funções.
friend: Isso é chamado de selective export, mas em C++ não é muito bem implementado. Basicamente o objeto parece uma coisa para um e outra para outro, depende do ponto de vista. Em Java podemos simular isso fazendo um objeto implementar múltiplas interfaces e fazer com que outros objetos conheçam-o por uma delas apenas.
1mmm! Até que eles são bem úteis. Aliás, o conceito por trás do friend é útil, mas como tu disse a implementação (e a escolha da palavra chave) foi bem infeliz.
Dá pra declarar friends em bloco? Como se faz com public, por exemplo? Dizer de uma vez só que vários membros são friends de tal classe? Aí sim fica interessante.
A do struct é estranho. Se vai ser apenas uma estrutura de dados, como pode ter método (comportamento)… aliás, pode né? :D
* Tive um fight com o server hj, mas ja voltou. Trackback n deu sinal de vida, mas eu linkei la no post original ;)
C dá bastante corda para você se enforcar. Já o C++ te dá mais a escadinha e a árvore.
Hahahahaahha o excelente foi o comentário do Alberto Zampieri ! hahahaha