Conheço C # muito bem (autodidata, infelizmente) e preciso fazer alguma programação em C ++ para um aplicativo do Windows. Consegui encontrar uma tonelada de informações para desenvolvedores de C ++ que aprendem C #, mas não consegui encontrar muita informação sobre como aprender C ++ quando você já conhece C #. Alguém já se deparou com um bom resumo do básico?
O MSDN tem uma comparação, mas não é muito aprofundada.
Posso reunir várias fontes, mas achei que havia algo lá fora - simplesmente não consigo encontrá-lo. Obrigado pela ajuda.
Respostas:
Este tópico sobre desenvolvedores de C ++ para Java é muito semelhante e deve ser útil, especialmente na publicação de Mark Byer:
Provavelmente, o mais importante a ser lembrado é entender a diferença nas técnicas de gerenciamento de memória entre C # / Java e C ++ .
Um dos meus professores veio de Java e ministrou um curso introdutório de C ++, pensando que seria ótimo. Nada do que ele explicou fazia sentido para alguém. Ele teve vazamentos de memória por toda parte. A aritmética do ponteiro dele era terrível. Ele nunca chegou à parte OOP do currículo (graças a Deus). Praticamente nada que ele demonstrasse teria compilado. Ele não entendeu que
char[]
precisava de um sentinela\0
. Não termine como ele.fonte
char[]
então , não é?char[]
raramente é usado em C ++ não significa que não é ensinado ou que não deve ser ensinado.char[]
ainda é importante estar ciente, porque C ++ é um superconjunto de C e é imperativo que ele seja entendido corretamente, se é para ser aprendido.std::string
e, se precisar interoperar com uma API C,c_str()
é para isso que serve. Não é necessário que o programador lide com achar[]
terminação NULL ou nada disso. O manuseio de string no estilo C é total e totalmente e totalmente obsoleto para todos os usos possíveis, exceto a interoperabilidade com o código C antigo, que é perfeitamente bem tratadoc_str()
.char[]
certo, porque todos os usos dechar[]
estão errados. Seu professor provavelmente teria sido absolutamente bem se tivesse preso a C ++ em vez de C.Infelizmente, não há muito sobre C ++ que seja básico, então eu não teria muitas esperanças. Além disso, há pouco que você saberá sobre C # que é transferível remotamente para C ++, então eu não esperaria que existisse material específico cobrindo esse ângulo. Você precisará aprender do zero.
fonte
cout
e maneiras simples para alcançar objetivos simplesNão há uma solução fácil para isso, o C ++ não é particularmente difícil, mas não é fácil para iniciantes.
Eu recomendaria ler o básico da programação C (para obter um conhecimento básico das coisas de baixo nível que você encontrará) e depois aprender o STL, seguido de artigos de Scott Meyers. Aqui está uma para você começar, pois mostra como você deve escrever C ++ moderno, comparado com C-com-classes.
fonte
reading up on C programming
. Eu acho que isso faz mais mal do que bem e cobre a noção de que C e C ++ são linguagens que precisam ser estudadas em conjunto.delete
arrays C e outras coisas que são desencorajadas em C ++ do que eles, que eu atribuo ao NÃO estudar explicitamente C. C é relativamente simples, você pode descobrir rapidamente o que o código faz.malloc
efree
. Um ótimo desenvolvedor de C ++ acabará desejando saber sobre eles. Começando com eles é uma coisa totalmente diferente.Não tenho certeza se você ainda está procurando materiais, encontrei este artigo há alguns meses. Não é um livro (apenas 53 páginas). A introdução diz tudo:
This is a somewhat short guide to the important things to know if you are a C# programmer and find yourself needing or wanting to work in C++
http://geekswithblogs.net/mikebmcl/archive/2012/02/02/c-to-c-ndash-a-somewhat-short-guide.aspx
E também há um post de atualização:
http://geekswithblogs.net/mikebmcl/archive/2012/02/14/c-to-cndasha-somewhat-short-guide-update-1.aspx
Feliz aprendizado :)
fonte
fonte
Eu acho que é bom que você não encontre muitos tutoriais de C # para C ++. Eles provavelmente podem atrapalhar seu cérebro. É como tentar aprender a andar de moto primeiro e depois mudar para uma bicicleta (não uma anologia totalmente apropriada, mas você entendeu). É melhor você fazer um livro novo sobre C ++. Como você já está familiarizado com os conceitos de POO, você pode pular as longas introduções aos conceitos de POO (elas são destinadas a pessoas que migram de C para C ++). Ou vá diretamente para um livro de referência destinado a níveis iniciantes a intermediários ou intermediários.
fonte
Eu recomendaria ir ao Código Rosetta e comparar os dois. Enquanto você estiver lá, mantenha à mão um link de idiomas C ++ e tente identificá-los. Depois, dedique algum tempo ao domínio ponteiro / referência / memória / destruidor. Depois disso, aprenda sobre o pré-processador - ele pode realmente ser seu amigo quando se trata de esconder os feios, eu meio que sinto falta. Finalmente, o STL.
fonte
Então, cerca de um ano atrás, eu estava no mesmo barco que você: aprendi c # dev que sentiu a necessidade de aprender C ++. Concedido, parei e comecei várias vezes. Na minha terceira tentativa, finalmente consegui.
O que é essencial entender é que, em termos de metodologias C ++ e C #, você provavelmente gastará muito tempo entendendo quais métodos de manipulação de dados por meio de ponteiros e referências realmente significam, bem como quando e como usá-los, dadas as circunstâncias.
O bom do C ++ é que a alocação da pilha de objetos é bastante simples, e você deve alocar objetos dessa maneira se o seu programa atender aos requisitos especificados neste método. Caso contrário, você depende de indicadores para velocidade, eficiência e limpeza rápida. Eu recomendo a leitura: http://www.parashift.com/c++-faq-lite/ , pois fornecerá MUITO conhecimento técnico sobre como o C ++ funciona sob o capô.
Deixe-me lhe dar um exemplo:
No C ++, existe essa implementação de construtor conhecida como "lista de inicialização", que difere da inicialização de membros da classe no corpo de um construtor. Por quê? Porque, a menos que o tipo que está sendo inicializado seja primitivo, o compilador criará cópias múltiplas e desnecessárias do objeto que está sendo criado quando alocado no corpo do ctor. Isso pode potencialmente reduzir o desempenho, dependendo do compilador, bem como dos requisitos em escala do aplicativo.
Sabe o que é um delegado? Bem, em C ++ é conhecido como um ponteiro de função . No início, esse idioma é bastante difícil de dominar, mas se você quiser ser incrível ... é definitivamente necessário.
C # é fácil ... muito fácil.
fonte
Acredite, escolha um bom livro sobre C ++ (há muito mais, basta pesquisar) e comece a aprender ...
fonte