Bom, agora vamos começar a trabalhar com espaço e argumentos.
Lembra na aula passada quando eu expliquei instance ( ou objeto )? Bom, agora então vamos começar a falar de espaço, e como conseqüência, espaço da Instance. Espaço ( scope ), é basicamente o local que ele se situa. Eu separo um programa em 2 scopes, o Global e o Local. Scopes Globais são inicializados fora de funções e eles só são destruidos ( executa o destructor ) apenas o final de main ( já executou todas as funções necessárias ), um exemplo de um Scope Global seria o nosso "Planeta Terra;" da lição anterior, ele é executado antes da função main e somente é destruido após do término da mesma. Scopes Globais são aqueles que duram somente o tempo da função ou do bloco de condição que ele se encontra.
#include <iostream>class Planeta {public: Planeta (int i) { std::cout << "Ola de " << i << ".\n"; } ~Planeta () { std::cout << "Tchau.\n"; }};Planeta Terra (1);int main(){ Planeta Marte (2); std::cout << "Ola de Main!\n";}
Vamos novamente ver o nosso programa de baixo para cima.
Função Main
Lembra de como eu ensinei vocês a declarar um Instance ( Objeto )? eu enganei vocês, pois na verdade é :
Classe Nome_do_Objeto ( Variáveis );
Sendo cada variável separada por uma Vírgula, Ex.: Humano Adriano ( 16, 67 );
Agora, porque enganei vocês? Simples, porque caso eu falasse isso vocês iriam fazer um "( )", então o programa não funcionaria. Existem alguns casos no qual você não pode utilizar os parênteses em branco ( vazio ), um desses casos é esse.
agora vamos olhar para nosso instance já indentificado e compreendido.
Planeta Marte (2);
Planeta, chama a classe no qual ele vai utilizar. Marte, o nome escolhido. (2), variável a ser enviada ao constructor.
Toda vez que um instance é declarado com alguma variável, essa variável vai para o constructor, e não para alguma variável declarada dentro do constructor ou da classe.
Nesse caso, Marte é um Scope local, pois logo em seguida que a função acaba ele é destruído.
std::cout << "Ola de Main!\n";
uma simples chamada da função cout para escrever a mensagem na tela.
Scope Global
Existe somente um, o " Planeta Terra (1); ", que já foi explicado. Lembre que este instance será destruido somente após o término da função main.
Class
Aparece somente 2 coisas novas, o " int i " dentro dos parênteses do nosso constructor e o " << i << ".
O " int i " é a declaração de uma variável, ainda não vamos aprofundar nisso, somente vou dar uma explicação básica. Int é como se declara uma variável, int é um ' declarador ' cujo mesmo só aceita variáveis inteiras, e o conceito de scopes continua ativo nas variáveis, somente é válida no scope no qual ela se situa, basicamente isso. Não se confunda pensando que utilizamos " int main () " significa obrigatóriamente que só aceita valores inteiros, veremos isso mais para frente quando vermos funções.
Então pelo que já sabemos, o nosso constructor espera uma variável ( pois ele declarou uma! ), então ele utiliza a mesma para imprimi-la na tela depois.
O " << i << " é uma forma de imprimir uma variável na tela, é só pensar, se " inicia um texto ( string ) e foi utilizado " << " antes de começar uma string, se vc fechar as aspas e colocar << vc estará inicando outro bloco de string, porém para pular linha vc necessita do "\n".
Agora ao você compilar esse programa, você receberá a seguinte mensagem :
Ola de 1.Ola de 2.
Ola de Main!
Tchau.
Tchau.
Bom, nosso programa está funcionando, porém quem enviou o 1° Tchau e quem enviou o segundo ? Nós sabemos graça a explicação de scopes que eu passei ao começo da aula, mas e se nós estivessemos trabalhando com um programa mais complexo, como saberíamos?
Então antes de arrumar essa falha vou voltar nos instances. Uma classe não é nada sem um instance, o instance então se torna a identidade de um novo instance em relação a classe. Não estou dizendo que a classe não é nada, mas sim que o instance não é nada sem a classe. Infelizmente o nosso destructor não é que nem o nosso constructor, quer dizer que pode ser declarado variáveis, ele infelizmente não pode. Se você tentar declarar alguma variável lá retornará um erro, pois destructors não podem haver argumentos. Então, como vamos fazer para mostrar ao Tchau a quem ele pertence já que não podemos declarar nada no destructor e não podemos utilizar a variável i que foi declarada no constructor, então só funcionará para o mesmo. Então vamos dar um pouco de memória ao programa da seguinte forma, adicionando uma segunda variável e trabalhando com ela.
Dando memória a ele, ele ficará dessa maneira :
#include <iostream>class Planeta {public: Planeta (int i) : _identidade (i) { std::cout << "Ola de " << i << ".\n"; } ~Planeta () { std::cout << "Tchau de " << _identidade << ".\n"; }private: const int _identidade;};Planeta Terra (1);int main(){ Planeta Marte (2); std::cout << "Ola de Main!\n";}
Apareceu 3 novas coisas,
1° Private, isso significa que somente a classe em si poderá modificar esta variável;
2° const, isso significa que o valor da variável é constante, quer dizer após inicializado o valor permanecerá o mesmo até o término no programa;
3° " : _identidade (i) ", significa que o valor de _identidade será igual ao valor de i.
Reparem também que eu utilizei um underline antes da variável, isso é simplismente por uma questão de entendimento, todas as variáveis que serão private virão com um underline antes do mesmo ( se você quiser pode utilizar sem, porém lembre da declaração que deve ser igual, pois o C++ é Case Sensitive, quer dizer "ab" é diferente de "aB" que é diferente de "Ab", assim sucessivamente ).
Essa parte após os dois pontos, também é conhecida como " preamble ".
Simples não?
Para continuar, vou ensinar-lhes um loop.
Ele funciona da seguinte maneira :
for (função 1; função 2; função 3){ }
sendo:
função 1, a declaração de uma variável ( através do int, somente o que aprendemos até agora );
função 2, condição para continuar ( depois veremos todas as condições );
função 3, o que acontece caso for verdadeiro e o bloco de código for executado com sucesso.
Caso não deseja utilizar uma das expressões necessárias apenas adicione o ; como se obtivesse uma.
Ex.:
for(int id = 3; id < 6;){ }
Ex. 2:
for(int id = 3; id < 6; id++){ }
Lembrando que o for cria um scope local, quer dizer quando ele termina todas as variáveis utilizadas nele são destruidas.
Vamos a um programa simples utilizando o for :
#include <iostream>class Planeta {public: Planeta (int i) : _identidade (i) { std::cout << "Ola de " << i << ".\n"; } ~Planeta () { std::cout << "Tchau de " << _identidade << ".\n"; }private: const int _identidade;};Planeta Terra (1);int main(){ Planeta Marte (2); for (int i = 3; i < 6; ++i) { Planeta MeuMundo (i); } std::cout << "Ola de Main!\n";}
Lembre-se sempre dos scopes, pois somente foi possível utilizar "Planeta MeuMundo (i)" pois após o término do loop do for ele checa se pode continuar, e nesse check é destruido o loop anterior e criado num novo loop, caso vc tentasse criar uma instance com um nome já apresentado anteriormente e o mesmo não foi destruído ( Ex.: Planeta Terra (i); sendo que i pode ser qualquer número inteiro ) irá retornar um erro dizendo que ele já foi declarado anteriormente.
Por uma questão de estética e entedimento do programa, sempre utilize corretamente as chaves, nunca faça isso :
for (int i = 3; i < 6; ++i) { // Não Faça isso! Planeta UmMundo(i);}
Repare sempre como está organizado o pograma que eu repasso a vocês.
Última coisa a aprender hoje :
Há 2 formas de se comentar, uma é utilizando 2 barras transversais ( // ) que pegará todo o resto da linha, e será ignorado pelo compilador na hora de compilar, ou utilizando /* e */ respectivamente para o início e o fim do bloco comentado, excelente para utilizar no meio de bloco de códigos que somente é para lembrar algo, Ex.:
for (int i = 3; i < 6 /* se i for menor que 6 continua */; ++i) { Planeta UmMundo(i);}
Por hoje é só ^^
Lembrando...
</span>






info
Grupo: Campones
Registrado: 23/07/05
Posts: 71
Reputação: +1
~> Original em inglês (no qual essas aulas são baseadas): http://www.relisoft.com/book/
Todas as dúvidas deverão ser tiradas por MSN ou PM.
Esse tutorial não segue normalmente as aulas " clássicas " de C++, onde simplismente apareceria uma mensagem " Olá Mundo ", mas aqui, vamos criar um mundo e fazer com que ele consiga responder a esse chamado, nos retornar uma resposta ( a longo prazo ).
#include <iostream>class Planeta{public: Planeta () { std::cout << "Oi!\n"; } ~Planeta () { std::cout << "Tchau!\n"; }};Planeta Terra;int main() { }Esse programa é dividido em 4 partes, sendo elas :
* Include;
* Class;
* Objeto;
* Função Main;
Include
Este atributo serve para incluir alguma biblioteca ( lib ) ao programa. No caso do nosso programa, inclue o <iostream> que seria a lib utilizada para escrever na tela do programa. O include é chamado da seguinte maneira :
Ex :
#include <stdlib.h>
Class
Agora é um pouco mais complexo. Eu imagino da seguinte maneira, existe várias pessoas no planeta terra e todos contém características em comum, criando uma classe, a dos Humanos, dentro dessa classe vamos conter todas as características dos seres humanos, Nome, pele, altura, peso, idade, etc..
Objeto
O Objeto que irá mostrar as diferenças entre as classes. Lembra daquela nossa classe, a dos Humanos? Então, pelo menos eu não sou igual a minha mãe, então é 2 instânceas diferentes, porém da mesma classe, então eu sou uma instância da classe dos Humanos.
Um Objeto ( ou instância ) pode ser declarado da seguinte maneira:
Ex:
Planeta Marte;
Função Main
Bom, se você mostar somente a função main do nosso programa para algum programador ele irá falar que o nosso programa não faz nada.
A função main é a função principal do programa, ela é a única função realmente obrigatória em qualquer programa.
As funções contém um limite, e esse limite no caso é demarcado pelas chaves ( { e } ), no futuro estudaremos a fundo as funções.
Agora vamos trabalhar com o que aprendemos até agora no nosso programa, vamos vê-lo de trás para frente, pois assim será mais fácil.
int main() { }Essa é a função pricipal, mesmo sem nada dentro dela ( repare que as chaves estão vazias ) é obrigatória a sua presença no programa.
Esse é o Objeto que foi declarado, que no nosso caso é a Terra.
Repare como é feito, pegamos uma classe ( Planeta ), e declaramos um nome ( instância ) para fazê-lo diferente. Repare também que ele está fora de uma função, quer dizer ele é Global. Um termo ser Global significa que ele está fora de qualquer função, fora das chaves de limitação de uma função.
class Planeta{public: Planeta () { std::cout << "Oi!\n"; } ~Planeta () { std::cout << "Tchau!\n"; }};Agora vamos ver a classe Planeta, vamos ver linha por linha.
Cria uma classe e suas características, se você desejar também pode criar a classe dos humanos, vamos aprender a mecher com variáveis no futuro, para então realmente criar uma classe. Repare logo em seguida o " { " demarcando que existe um limite dessa função.
Fala que o que vamos mecher é público. Imagine da seguinte maneira, uma conta de banco, Conta, depósitos, Retiradas, Saldo, etc., nenhum atributo da conta pode ser público, pois se não iríamos ver a conta do nosso amigo e rouba-lo
.
Vamos ver isso a fundo no Futuro também.
Planeta () { std::cout << "Oi!\n"; }Isso é um 'constructor', vamos dizer, toda vez que um objeto dessa classe é criado será executado esse bloco de código. O constructor obrigatóriamente tem que ter o mesmo nome da classe, se a classe fosse Humano, o constructor também seria Humano.
O constructor seria uma mini função, podendo conter atributos.
std::cout << "Oi!\n";
É uma função que contém na lib iostream, se nós não tivessemos incluido a lib no começo do projeto não iriamos conseguir utilizar essa função, a função é simples de se usar :
std::cout << "Mensagem";
Este pequeno bloco de código imprime a mensagem Oi! na tela, o " \n " seria uma nova linha.
~Planeta () { std::cout << "Tchau!\n"; }Isso é um 'destructor', quer dizer, esse code será executado toda vez que uma classe for destruída ( provavelmente quando fechar o programa ).
O destructor é demarcado pelo ~ ( Til ) antes do constructor, e como já vimos ele envia a mensagem Tchau! a tela.
e nosso querido include que já falamos a respeito dele.
Bom... Logo após compilar, vocês irão rodar o programa, e vcs perceberão que uma coisa preta abrirá, ficará por uma fração de segundo e depois sumirá. Por isso eu utilizo o command ( cmd ), para abri-lo vá em Iniciar, Executar, então digite " cmd " e abrirá uma janela do MS-DOS.
Chegue até local do projeto e execute o arquivo .exe então vc poderá ver o que ocorreu.
Utilizando os comandos :
cd diretório
vai até um diretório
cd ..
volta uma pasta
dir
lista todos os arquivos presentes no local que vc está.
você deverá ver da seguinte maneira ( somente os diretórios diferentes )
Bem... Isso é tudo pessoal!~
</span>
Então significa que não há o que postar, pois cada aula será seguida de um Post...
Editado Setembro 16 por honux
Adicionar link para o original em inglês e tirar "Proibido postar no tópico" já que está fechado