Tip:
Highlight text to annotate it
X
Vamos iniciar ao estilo C++ criando uma classe e usando g++ e "iostream".
É claro que C++ não é só isso. Vamos só arranhar a superfície.
Criando um arquivo para nossa classe. A extensão é geralmente ".cc" ou ".cpp", mas vamos de ".c" mesmo.
Começando ao estilo C com "stdio.h" e "printf".
Compilando com o compilador C.
Vamos testar um programa C sendo compilado pelo compilador C++ ...
Funciona!
Copiando o arquivo myClass.c para myClass.cc ...
Ambos os arquivos tem o mesmo conteúdo C.
Tentando compilar o progama C (com extensão ".cc") com compilador C.
Não dá certo!
Compilando código C com o compilador C++ (g++). OK!!!!
Compilador g++ compila código C e C++, mas compilador gcc só compila código C. Esse gcc ainda não compila código C em arquivos com extensão ".cc".
Jeito C++ de se imprimir na tela: cout
O prefixo "std" seguido de "::" antes de "cout" quer dizer que queremos utilizar a função cout do "espaço de nome" (namespace) "std".
cout necessita da biblioteca C++ chamada "iostream".
Testando ...
Funcionou!
gcc não consiguirá mais compilar pois o código não é C puro.
gcc não sabe sobre "cout" e "iostream".
Vamos tirar o código C do fonte e deixar só C++
Criando uma classe chamada Person.
Com um variável inteira chamada "age" e um string chamado "name".
Manipular string em C++ é muito mais fácil que em C.
Declarando uma variável do tipo Person chamada "person" (poderia ter sido client).
Atribuido o valor 43 a variável "age" da variável (instância) person.
Imprimir com cout.
"endl" é o mesmo que "\c". Serve para mudar de linha.
Ops! Erro! Acho que deveremos por uma "include" para string.
Parece também estar faltando um "dois pontos" em algum lugar.
Hummm, faltou prefixar "std" antes de string e um "dois pontos" no cout.
Vamos por um ponto e vírgula após a declaração da classe.
Pronto!
Não mostrei isso com "struct", mas é possível declarar uma variável ao mesmo momento que se declara a estrutura.
Atribuido uma string a variável "name" da instância de classe "person".
Vamos imprimir o nome.
Uma das vantagens de classes é que podemos declarar também funções e não só tipos de dados.
Vamos declarar "age" e "name" como sendo dados privados e declarar métodos/funções como públicos.
A função membro setAge() terá a responsabilidade de atribuir valor ao dado privado "age".
A função membro getAge() será responsável por nos dar acesso ao dado privado "age".
Aqui vai a implementação das funções membro.
Como "age" agora é membro privado de Person, não é mais possível acessá-lo diretamente. Só por meio das funções membro públicas.
usualmente é assim que se faz: define-se as variáveis como sendo privadas e os métodos get e set para acessá-las.
Nossa classe no momento está no mesmo arquivo do programa principal. Vamos por essa classe em um arquivo separado.
Mas antes, vamos informar ao compilador para usar o namespace padrão. Assim não precisaremos mais escrever "std::" antes de certas funções.
Vejamos se está funcionando ... OK!
Vamos retirar os prefixos.
Testando ...
Ok!
Como disse, "using namespace std" nos poupa de escrever "std::" antes de certas funções, mas não é sempre que isso é recomendável.
Copiando myClass.c para myClass.cc para trabalharmos com um arquivo com extensão ".cc".
Apagando o myClass.c ...
Apagando o "arquivo myClass.c~". Arquivos que terminam com "~" são arquivos de backup de algum programa, nesse caso o gedit.
Compilando o arquivo ".cc". Não deve ocorrer nenhum problema, certo?!!!
Copiarei o myClass.cc para ***.cc. Este último será nosso programa principal e o primeiro conterá nossa classe.
Aqui deixaremos o programa principal.
Dessa vez colocaremos tanto o arquivo de cabeçalho da classe quanto a sua implementação em diretórios separados em arquivos deparados.
O diretório include ficará com o arquivo de cabeçalho.
Criando e editando o arquivo de cabeçalho. Colocaremos a extenção ".hh" como forma de dizer que é C++.
Da mesma forma como fizemos no outro vídeos, colocaremos aqui as diretivas de compilação e o "protótipo" da classe.
Vou retirar essa variável string só para simplificar as coisas.
Podemos apagar o protótipo de classe no programa principal.
Mudando de diretório para ciar a implementação da classe.
Copiando a implementação para o arquivo.
Não estou certo se essa include é necessária, mas de qq forma a escrevi.
Como não estamos usando nenhuma funcionalidade de string aqui, então podemos retirar essa include.
Compilando a classe Person.cc dentro do diretório "src".
Erro! O compilador não sabe onde está o arquivo de cabeçalho que declaramos dentro de myClass.cc.
Vamos informar ao compilador onde procurar o arquivo de cabeçalho: -I../include
Veja o arquivo myClass.o que é o myClass.cc compilado.
Agora temos que compilar o programa principal que faz uso da classe myClass.
Veja: daremos ao compilador o código compilado da classe que está dentro do diretório "src".
Erro! No programa principal ***.cc esqueci de por a include "Person.hh".
Outro erro! Novamente, o compilador tem que ser informado onde encontrar o arquivo de cabeçalho.
Dessa vez, vamos informar onde está o arquivo de cabeçalho: -I./include
Oh Oh! Não é "../include". Eu não estou mais dentro de "src". Devo usar "./include"
Pronto!
Existe uma outra forma de fazer essa compilação e linkedição.
Entrando no diretório "src" e apagando o arquivo objeto e todos que comecem com "Pe" e terminem com ".cc~".
Faremos a compilação de forma diferente.
Ao invés de compilarmos previamente a classe, faremos isso tudo ao mesmo tempo.
Ok!
É interessante automatizar esses procedimento por meio do programa "make". Mas fica para um próximo vídeo.