Então agora a STRUT pode ter função virtual e herança de suporte? Que diferença com as aulas então? Qual é o verdadeiro objetivo da oculto à informação? [duplicado

StackOverflow https://stackoverflow.com/questions/3845564

Pergunta

Possível duplicata:
Quais são as diferenças entre estrutura e classe em C ++

http://www.cplusplus.com/reference/std/typeinfo/type_info/

Acho que meu "professor" não me contou muito sobre as diferenças entre a estrutura e as classes no C ++.

Eu li em outra pergunta que, relativa à herança, a estrutura é pública por padrão ... Eu também acho que a Struct não tem construtores/destruidores ...

Quais são as outras diferenças então? Eles importam muito?

E ao falar sobre atributos/métodos privados/protegidos, eles não são acessíveis em tempo de execução, apenas porque o compilador diz isso no momento da compilação e relata um erro, certo? Em seguida, comparando esses recursos com as classes, o que o "esconderijo de informações" realmente traz para o programador? Está aqui para que, quando alguém reutilize a classe, essa pessoa não usará a classe porque as coisas privadas/protegidas serão relatadas pelo compilador?

Eu ainda luto com o verdadeiro propósito de esconder -se, ainda quer soar na minha cabeça, como traz mais segurança nos programas, o que significa menos violações de segurança, mas estou realmente confuso sobre o objetivo de esse design no idioma ... (E não pretendo ser contra o C ++ de forma alguma, apenas para entender em que casos esse recurso pode ser interessante ou não; se não, isso não é um problema, mas eu gosto de saber ...).

Foi útil?

Solução

No que diz respeito ao compilador, não há diferença entre struct e class além da acessibilidade padrão. Eles são apenas duas palavras -chave diferentes para definir a mesma coisa. Portanto, as estruturas podem ter construtores, destruidores, classes base, funções virtuais, tudo.

No que diz respeito aos programadores, é uma convenção comum usar struct para aulas com nenhuma dessas coisas (especificamente que são Pod), ou ir ainda mais longe e usar struct Somente para classes sem funções membros definidas pelo usuário, apenas membros de dados públicos. As pessoas às vezes bagunçam essa convenção, porque é surpreendentemente fácil pensar que uma aula é pod quando não é, mas pelo menos eles estão tentando.

Em C ++, pelo menos, a ocultação de informações não tem absolutamente nada a ver com segurança. Coloque isso bem da sua mente. Ele não fornece nenhuma segurança, exceto da mesma maneira geral que qualquer boa prática de codificação faz com que o código seja mais fácil de raciocinar e, portanto, os programadores cometem menos erros.

O objetivo do esconderijo das informações é permitir que você altere a implementação posteriormente, talvez para remover ou renomear membros privados, com segurança, sabendo que nenhum dos usuários da sua classe, fora da classe e dos amigos, está se referindo a eles. Obviamente, é útil fazer exatamente isso, mas menos obviamente e talvez mais importante, é útil porque isso explícita no código qual é a interface da sua classe, que você querer Os clientes usam e que os usuários da sua classe podem esperar funcionar. Você pode alcançar a mesma coisa em princípio com a documentação, mas na prática é bom para o compilador fazer cumprir as regras.

Não é "seguro" porque, em qualquer compilador, é possível contornar a proteção pública/privada. Mas se os usuários da sua turma fizerem isso, eles estão usando algum hack grotesco, eles merecem o código para parar de compilar/trabalhar quando você mudar sua classe e, se eles o vieram para reclamar, poderá rir deles.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top