Nada que você já não esteja acostumado, NetBeans 6.7 é uma IDE fenomenal pra qualquer coisa, eu uso C++ e é perfeita… Tem o Code::blocks tbem o mono develop, se for ms o Visual Studio (eu acho ridiculo, não te ajuda com porcaria nenhuma)… e mais algumas ai
Uma dica é compilar a lib boost pra deixar seu codigo portavel www.boost.org eu sempre uso é muito boa e será incluida por default na próxima geração do C++.
Se você for trabalhar (não estou dizendo “brincar”) com C++ e Windows, recomendo você ter o Visual Studio mesmo.
Como o Maiko lhe disse, ele não ajuda muito (aliás, ele é cheio de “nervosismos” e coisas esquisitas - refactorings decentes provavelmente só entrarão no Visual Studio 2010), mas é o que você tem de usar em grande parte das empresas que usam C++.
Além disso, se você precisa usar o Platform SDK mais recente para poder usar os recursos mais recentes (Windows 7, 2008 Release 2 etc.) é mais provável que os programas de exemplo só funcionem com o compilador da Microsoft.
a boost é um SDK e é multiplataforma… se voce for usa o NetBeans no windows precisa instalar um compilador caso não tenha nenhum… nos linuxs é só instalar que ele ja usa o GCC.
Não necessariamente, eu trabalho com C++ uso ubuntu e netbeans numa boa aqui no trabalho. Vai por um algoritmo genético pra rodar no windows pra ver a inhaca que fica o sistema…
E o NetBeans vem com a sinalização das variáveis e funções, te avisa sobre sintaxe errada (ainda precisam melhorar um pouco isto pra C++, mas já bem útil), refatoração de variáveis e métodos, etc. Tem gente que usa o MSVS, eu particularmente não curto pois não te ajuda em nada, é um Gedit grandão rsrs mas pra quem já se acostumou não vê problema.
Comece pelo livro do André Bueno, descrito ali no site. Depois, o roadmap está lá.
De IDE, eu recomendaria começar pelo Code::Blocks ou pelo Visual. Ambos são de graça. Eu acho o Netbeans e o Eclipse desnecessariamente pesados, e irão te fornecer basicamente os mesmos recursos dessas duas, mas são boas IDEs.
O Visual é interessante por ser padrão na indústria, além de fornecer boas ferramentas para identificação de erro após o crash do software (postmortem debugging).
O que eu aconselho é não utilizar o DevCpp. IDE antiga, cheia de bugs, com um compilador mais antigo ainda. Já vi muita gente perder horas e horas procurando um bug no código, e resolver o problema desinstalando o dev…
Não se esqueça também que o C++ não é C. Quando estiver estudando, fique atento aos seguintes conceitos:
C++ é uma linguagem com 3 paradigmas: estruturado, OO e genérico (templates);
C++ é formado pela linguagem e pelas bibliotecas STL e Boost. A STL é uma biblioteca padrão, vem com qualquer compilador. A boost é uma biblioteca de extensão, criada pelo mesmo comitê que desenvolve C++, mas não nos prazos da normatização (precisaram fazer isso pq o C++ é normatizado pela ISO, portanto, demoraria muito só acrescentar recursos a biblioteca padrão, como o Java faz). Não diga que o C++ é ruim antes de conhecer as duas bibliotecas. É o mesmo que dizer que o Java não presta, antes mesmo de usar qualquer classe da API dele…
Existem conceitos importantes em C++, que facilitam a vida do programador. Depois de quebrar um pouco a cabeça com ele, procure por RAII, Exception Safety e Smart Pointers.
Tive dificuldade em instalar o compilador no NetBeans então parti para o Visual C++ 2008 Express e vou ver oque rola.
Pelo que vi, tem muita coisa para aprender, muita mesmo. Ja vi que vou ter que pesquisar sobre namespaces, para que servem os arquivos de header, operadores como “::”.
Alias… se alguem ja poder me dar uma luz do para que serve o “::” e por que o cout usar um operador “<<” 8).
Onde o Java usa a pontuação “.” (para separar componentes de nomes de pacotes, nomes de variáveis de instância, etc.) o C++ usa três pontuações diferentes:
:: ==> Indica o escopo. (Por exemplo, “std::string” seria algo semelhante ao nosso java.lang.String)
. ==> Para pegar o valor de uma variável de instância. (“a.b”)
-> ==> “a->b” é uma abreviação para “(*a).b”, mas em Java o equivalente seria algo como “a.b”.
É como a diferença entre português e inglês. Onde usamos o verbo “ser” e “estar”, em inglês usa-se o verbo “to be”.
O operador “<<” (que normalmente é usado para o “deslocamento de bits para a esquerda”, igualzinho ao Java) foi redefinido para o uso com iostreams para simbolizar a operação de saída. Assim como o operador “>>” foi redefinido para simbolizar a operação de entrada.
Você também pode redefinir operadores, mas é obviamente isso que “confunde” as pessoas que vêm de uma linguagem mais “blue-collar”, como o Java.
(C++ não sabe muito bem qual é o seu perfil: você pode escrever programas bem “blue-collar” mas se quiser escrever coisas estratosféricas em C++ é plenamente possível.
Em contraposição, o Java (pelo menos até a versão 1.4) foi deliberadamente tornado mais simples, para evitar o uso de coisas que desafiam a intuição e/ou o senso comum. (Note que a introdução de “generics” começou a deixar as coisas um pouco mais complicadas, e é por isso que provavelmente a introdução de ‘closures’ foi barrada no Java 7, sendo substituída pela introdução do ‘invokedynamic’, que não acarreta alterações na linguagem muito grandes, apenas na máquina virtual.)
[quote=enantiomero]Onde o Java usa a pontuação “.” (para separar componentes de nomes de pacotes, nomes de variáveis de instância, etc.) o C++ usa três pontuações diferentes:
:: ==> Indica o escopo. (Por exemplo, “std::string” seria algo semelhante ao nosso java.lang.String)
. ==> Para pegar o valor de uma variável de instância. (“a.b”)
-> ==> “a->b” é uma abreviação para “(*a).b”, mas em Java o equivalente seria algo como “a.b”.
É como a diferença entre português e inglês. Onde usamos o verbo “ser” e “estar”, em inglês usa-se o verbo “to be”.
[/quote]
Deixa eu tentar acrescentar um pouquinho.
:: é para acessar métodos estatiscos de uma classe, semelhante ao java, é um operador de escopo você indica de onde esta vindo a variável ou método, tanto para namespace como para classes.
. uso identico ao java quando não está sendo usado ponteiros, serve tanto para objetos como para estruturas (apesar de struct ser C). Ao acessa um método de determinado objeto alocado sem alocação dinâmica utilizasse objeto.metodo();
-> serve tanto para objetos como para estruturas (apesar de struct ser C). Ao acessar um método de determinado objeto alocado com alocação dinâmica utilizasse objeto->metodo();
no java não existe alocação estática é tudo dinâmica por default (ou o contrário rsrs, não sei ao certo) no C++ você tem de especificar.
O NetBeans eu nunca utilizei no Windows, no Linux reconhece tudo automaticamente. Use o MSVS mesmo então quem sabe você se adapte bem a ela, eu já tentei mas sem sucesso.
Abraço.
ps: leia qualquer apostila de C++ que você já coloca em prática os operadores, tem o ::* para ponteiros para funções e métodos, o * depende do lugar funciona para as mais variadas coisas.
MaikoID, você já está pedindo pro cara usar o “->*” (acesso a um ponteiro para membro) ? Ele vai ter um derrame. Eu só usei o tal carinha uma vez só, e não foi muito trivial o seu uso. (Basicamente eu criei uma tabela de funções-membro, e as chamava conforme um campo em uma mensagem. )
uashuhsuhsau! eu sei só falei por curiosidade, que em C++ você tem bastante liberdade, mas eu já precisei usar sim num processamento de imagens. Mas por hora rapaz esqueça isso pois tem uma sintaxe extremamente complicada. Só um typedef pra te ajudar mesmo.
Vou mostrar um typedef que tenho de usar em um projeto aqui, usando a biblioteca Boost.
(Renomeei os campos e outras coisas, deixando só a estrutura).
Basicamente ele é para uma estrutura de dados que se comporta como se fosse uma tabela SQL com 4 índices. O typedef é monstruoso, mas o resultado final é bem interessante.
Existe uma diferença fundamental na filosofia do Java e do C++.
Veja: “C++ is designed to give the programmer choice, even if this makes it possible for the programmer to choose incorrectly” (Stroustroup, The Design and Evolution of C++)
“Primary characteristics of the Java programming language include a simple language that can be programmed without extensive programmer training while being attuned to current software practices.” (Sun, The Java Language Environment Whitepaper).
Percebe a contradição das duas afirmações? Em C++, ninguém está preocupado com a simplicidade da linguagem, ou com te prevenir de erros. Estão preocupados em te dar escolhas. Seja de paradigmas, técnicas, ou gerência de memória.
Já em java, a preocupação é de se ter uma linguagem e uma programação simples. Por isso, muitas vezes lemos em artigos conceitos como “esse recurso iremos retirar da linguagem por ser sujeito a erros”, “por as vezes gerar dúvidas”, etc… Recursos como sobrecarga de operadores, acesso direto a memória, templates, foram todos intencionalmente rejeitados pela linguagem.
Isso é uma coisa ruim? Não necessariamente. Boa parte das escolhas do C++ não são necessárias para o software do dia-a-dia. Existem nichos específicos que irão usar esses recursos como é o caso da indústria, dos jogos e dos institutos de pesquisa.
tudo que o viniGodoy falar acate, o cara é gente boa pacas e tem um auto nivel de instrução. Já comecei a ler
Caraio!!! Passei a vida por achar um livro como este, simplesmente excelente… vou ler de cabo a rabo.
Infelizmente não é possível copiar, até deixa copiar mas fica tudo errado, uns caracteres estranhos, deve ser bug pois esta permitido a cópia… Já testei com o adobe e o evince.
Os arquivos com código fonte estão com os links quebrados, ViniGodoy por acaso vocẽ tem os mesmos atualizados?