Ver Feed RSS

osmano807

[Quase] Curso de C++

Avalie este Post de Blog
Apresentação

Olá! Bem, um amigo do fórum começou a fazer alguns tutoriais de Java, e eu lembrei que estava devendo uns de C++.
Eu não sei tudo sobre C++, aprendi na internet, então qualquer erro podem postar nos comentários, para a correção.
Neste 'curso', pretendo ensinar desde o começo de C++. O que nos remete a um mito.

O Mito

Há uma crença muito difundida na sociedade, que se aprende primeiro C para depois aprender C++: isso é a mais pura mentira! Como uma linguagem avançada como C++, ela já se afastou tanto da sua 'mãe' C, que hoje não se pode exigir C para aprender C++. Como exemplo, aprendi C++ direto.
Outro mito: C++ é mais lento que C. Balela... Isso depende da implementação do programa, e não da linguagem. Há até mesmo programas mais rápidos em C++ que em C, mesmo usando todas as 'novidades' de alto nível do C++.
Mais um mito inicial: Existe uma linguagem C/C++. Realmente, não é um mito, mas aconselho não misturar. C é C e C++ é C++.

O comecinho

Bem, temos que começar:
Código PHP:
#include <iostream>

int main() {
    
std::cout << "Olá mundo!" << std::endl;
    return 
0;

Linha 1:
Código PHP:
#include <iostream> 
Bem, essa é uma linha do preprocessor. Encare ele como um robozinho legal, que toda vez que lê "#comando", executa esse comando. No caso, o comando é include, o que o comanda a abrir o arquivo iostream e incluir seu conteúdo neste lugar. iostream é um arquivo onde existem definições de I/O para C++. Encare como arquivo essencial para esse início.
Note que as linhas do preprocessor não são terminadas com ponto e vírgula, já as linhas do código sim.

Linha 3:
Código PHP:
int main() { 
É a nossa função main. Toda vez que o programa é executado, o sistema operacional executa essa função. Há ela em outros formatos, que não vou abordar neste post. O básico de uma função, é que existe o valor de retorno (nesse caso, int, números), o seu nome (main), os valores a serem passados para a função (nesse caso, nenhum valor é passado, eles ficam entre os parênteses). A função é delimitada por chaves.

Linha 4:
Código PHP:
std::cout << "Olá mundo!" << std::endl
Humm, std::cout. STD é o namespace e cout é a função dentro do namespace. Complicado? É, programação orientada a objetos é chato! Encare no momento como uma pasta: std é a pasta principal, onde dentro dela tem um arquivo chamado cout, e dentro desse arquivo tem a implementação da função. std::endl é a mesma coisa, dentro do seu 'arquivo', existe só duas letras: "\n". Elas são o caractere que marca 'nova linha' no linux, outros sistemas operacionais usam outros caracteres, por isso de usar endl. Cada sistema operacional terá seu caractere definido quando for compilar.

Linha 5:
Código PHP:
return 0
Toda função tem que retornar algo. No caso da main, retorna um número. Assumimos que 0 é retorno com sucesso, e outro número, retorno sem sucesso.

Notem novamente que as linhas de código são terminadas com ponto e vírgula, e que o 'corpo' das funções é delimitado por chaves.

Compilando

Como estou focando em Linux (gambiarras com MinGW e CygWin servem), usaremos o compilador mais famoso que eu conheço. O GCC.
Vamos salvar o arquivo com o nome de exemplo.cpp. Extensão .cpp significa "C++" (arquivos em C, extensão .c)
Para compilar executamos:
Código :
g++ exemplo.cpp -o exemplo
Explicando: g++: Compilador C++, ele nada mais faz que transformar seu código em algo que seu computador possa entender.
exemplo.cpp: é o arquivo onde contém o código a ser compilado
-o: uma opção do g++, comanda para que o arquivo final seja salvo com o nome seguinte, no caso, exemplo. Se não dermos essa instrução, em sua maioria, o arquivo gerado será a.out. Procurem sempre especificar o arquivo de saída, por organização e para facilitar o 'estudo'

Pronto, compilado. Doeu? Agora só executar:
Código :
./exemplo
Pronto, acaba de fazer seu primeiro programa em C++.

Se houver qualquer erro, certifique que tenha digitado tudo corretamente. Se mesmo assim estiver dando erro, pode ter sido uma falha minha, visto que sou humado, e que estou fazendo isso escondido na aula de programação do meu curso técnico (paradoxal não?).


P.S: se possível, administradores, coloquem um syntax highlight para C++. Frescura minha, mas acho que fica melhor que usar a tag PHP para 'colorir', o que paradoxalmente, reconhece direitinho C++ pelo que estou vendo.

Atualizado 21-04-2010 em 10:10 por osmano807

Categorias
Dicas , Tutoriais

Comentários

  1. Avatar de code
    Antes de mais nada, meus parabéns pela iniciativa de também começar seu Blog com um tutorial sobre a linguagem de programação C++. Espero que se empolgue e avance com esse curso, ensinando a todos os interessados, desde um "Alô Mundo!" até o que "dá pra fazer de mais avançado" em C++ que você souber ensinar.

    E agora vamos a algumas críticas :-) Seu primeiro exemplo de código poderia ser menor. Ainda mais para um usuário iniciante. Você poderia ter apresentado seu código dessa forma:

    Código PHP:
    #include <iostream>

    int main() {
        
    std::cout << "Olá mundo!\n";
        return 
    0;

    E ainda explicar para que serve o \n dentro do texto a ser populado na tela quando o executável resultante da compilação for rodado no terminal.

    Minha segunda crítica ao seu tutorial está na sua forma de explicar as linhas. Como você pode ver, o sistema de apresentação de códigos do Under-Linux não apresenta as linhas do arquivo do código-fonte do programa. Então, não adianta você tentar explicar para o leitor (principalmente o iniciante) pelo número de linha no arquivo que só vai confundí-lo. Pior! Em um arquivo-fonte maior e com conhecimentos mais avançados, você também irá confundir os usuários mais experientes. E sem entender direito o que está acontecendo, contribuirá e muito para que eles percam o interesse pelo seu tutorial.

    Além disso, em qualquer arquivo as linhas em branco são contadas como linhas separadas. E como aqui não aparecem a numeração das linhas, e levando em consideração que os novatos não vão saber "contar" as mesmas, apresente as explicações por função/código. Quer um exemplo? Vou adaptar do seu próprio:

    Na linha 1, temos a instrução:
    Código PHP:
    #include <iostream> 
    Bem, essa é uma linha do pré-processador ...

    Não custa gastar um tempo marcando seu texto e repetindo as instruções no corpo do documento contendo a explicação. Ah! lembro a você de uma limitação do sistema do Under-Linux. Ele não permite a apresentação de caracteres "maior-que" e "menor-que", a menos que eles estejam dentro da tag PHP. Nem a tag CODE está permitindo isso. Por isso que apresentei seu exemplo reescrito dessa forma acima.

    Quanto a compilação do código, vale lembrar sempre aos leigos, que ele deve estar no terminal, no exato diretório/pasta onde ele tem o arquivo-fonte que acabou de criar. E na compilação, lembre ao usuário que ele também pode usar simplesmente o comando:

    Código :
    g++ exemplo.cpp

    Que vai funcionar perfeitamente. Aí você explica a criação do arquivo a.out. Assim o usuário saberá que, aquele arquivo de cor verde sem extensão, que aparece quando ele dá um ls no terminal, já é o executável correspondente.


    Depois sim, você poderia explicar o comando alternativo:

    Código :
    g++ -o exemplo exemplo.cpp

    E explicar várias coisas. A primeira delas é a vantagem de já poder dar um nome de arquivo executável compatível (ou igual) ao nome de arquivo-fonte. E explicar passo-a-passo o comando:

    No comando g++ -o exemplo exemplo.cpp, o g++ é o comando do compilador, o -o é para indicar ao compilador que você não quer que o objeto seja criado, o exemplo é o arquivo de saída, e o exemplo.cpp é o arquivo do seu código-fonte, que possui a extensão .cpp somente a título de ilustração e para evitar confusão. Sempre recomendamos que você crie seus arquivos-fonte com essa extensão, quando estiver programando em C++.

    E também você poderia explicar a segunda vantagem de não criar um objeto, a de que o arquivo resultante seria sempre a.out, e o mesmo sobrescreveria o executável a.out anterior. Pior ainda! Se você estiver trabalhando com vários fontes ao mesmo tempo (de programas diferentes escritos em C++), e for compilá-los sem apontar o nome de arquivo executável, você não somente não saberá de quem é o executável, como também sobrescreverá o anterior, possivelmente de outro fonte compilado.

    E quanto a seu questionamento de um highlight para C++, o sistema do Under-Linux ainda não tem o mesmo disponível. Quem sabe em breve :-D
  2. Avatar de osmano807
    Humm, verdade, corrigindo!
  3. Avatar de mfogaca
    Para quem só conhece VB como eu, gostei, e de inicio nao assusta, hehehehe
  4. Avatar de Magnun
    Ae osmano807, estou um pouco atrasado mas parabéns pela iniciativa! Assim eu sei que não sou o único louco a criar esse tipo de coisa aqui na under!

    Sei que cheguei atrasado no curso (estive longe da under por um tempo), mas gostaria de saber até que ponto você via chegar no curso de C++. Se possível, mostre a criação de interface gráfica utilizando C++ e GTK ou QT.

    Até mais...
  5. Avatar de osmano807
    Citação Postado originalmente por Magnun
    Ae osmano807, estou um pouco atrasado mas parabéns pela iniciativa! Assim eu sei que não sou o único louco a criar esse tipo de coisa aqui na under!

    Sei que cheguei atrasado no curso (estive longe da under por um tempo), mas gostaria de saber até que ponto você via chegar no curso de C++. Se possível, mostre a criação de interface gráfica utilizando C++ e GTK ou QT.

    Até mais...
    Seguinte, estou pensando em falar o que eu sei, então se eu pegar e aprender GTK/QT, faço tutorial também
    Tem é que pensar numa interface legal, GTK em Windows é um lixo, QT nunca peguei pra ver. Deve ter outra, sei lá...
  6. Avatar de Magnun
    GTK em Windows realmente não uma maravilha... mas quem estava falando que era para Windows?! :D

    Pra criar interfaces gráficas para Windows usei o Borland C++ Builder. Ele é ótimo, mas o GTK ainda é uma biblioteca muito mais potente!

+ Enviar Comentário