privateé preferido para dados do membro. Os membros nas classes C ++ são privatepor padrão.
publicé preferido para funções-membro, embora seja uma questão de opinião. Pelo menos alguns métodos devem estar acessíveis. publicé acessível a todos. É a opção mais flexível e menos segura. Qualquer um pode usá-los e qualquer pessoa pode usá-los mal.
privatenão é acessível. Ninguém pode usá-los fora da classe e ninguém pode usá-los mal. Nem mesmo em classes derivadas.
protectedé um compromisso porque pode ser usado em classes derivadas. Ao derivar de uma classe, você tem um bom entendimento da classe base e toma cuidado para não abusar desses membros.
MFC é um wrapper C ++ para API do Windows, ele prefere publice protected. Classes geradas pelo Visual Studio Assistente de ter um mix feio protected, publice privatemembros. Mas há alguma lógica nas próprias classes do MFC.
Membros como SetWindowTextsão publicporque você geralmente precisa acessar esses membros.
Membros como OnLButtonDown, manipulam as notificações recebidas pela janela. Eles não devem ser acessados, pois são protected. Você ainda pode acessá-los na classe derivada para substituir essas funções.
Alguns membros precisam fazer threads e loops de mensagens, eles não devem ser acessados ou substituir, portanto, são declarados como private
Nas estruturas C ++, os membros são publicpor padrão. As estruturas são geralmente usadas apenas para dados, não para métodos; portanto, a publicdeclaração é considerada segura.