the cyclops project - ufsc · histórico criada por bjarne stroustrup em 1979 no bell labs da...

44
The Cyclops Project Introdução: C++

Upload: others

Post on 01-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

The Cyclops Project

Introdução: C++

Page 2: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Aula 1 – Visão Geral

•Histórico da Linguagem•Programa C++: header, source – função main()• GCC•Arquivos objeto, bibliotecas dinâmicas e estáticas•#include, #define, namespaces, typedefs•Ponteiros, Referências, arrays, primitivas, estruturas de controle.

Page 3: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Características do C++

Linguagem multi-paradigma

Programação ProceduralOrientação a objetosMeta ProgramaçãoDesalocação memória – Decisão cabe ao usuário

Page 4: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Histórico

Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”.Em 1983 passou a ser chamada C++.Ao longo do tempo incorporou novas funcionalidades como herança múltipla, sobreescrita de operadores, templates entre outras coisas que veremos ao longo do curso.

Page 5: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Histórico

Possui compatibilidade com C, um compilador C++ deve compilar um programa escrito em C.Em 1998 foi definido um padrão ISO para a linguagem, revisado em 2003.

Page 6: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

GCC

GNU Compiler Collection

Compilador originalmente desenvolvido focando a linguagem C, chamava-se GNU C Compiler.Ao longo do anos passou a contemplar outras linguagens, como C++.

Page 7: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Programa C++ - Arquivos

Header – Definições / Visível a outros headersSources – Corpo de métodos e funçõesFunção Main – Função inicial evocada pelo executável

Page 8: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Programa C++ - Hello World

//file – hello_world.cc

#include <iostream>

int main(){

std::cout<<”Hello World!”<<std::endl;

return 0;

}

Page 9: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Programa C++ - Compilando o Hello World

$ g++ hello_world.cc -o hello_world

$ ./hello_world #executando

$ Hello World! #resultado

Page 10: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Bibliotecas Estáticas e Dinâmicas

Estática: o código executável copia os trechos com instruções que utiliza. O executável pode

ficar grande.

Dinâmica: A linkagem ocorre em tempo de execução. O executável acessa a biblioteca

durante as chamadas de funções.

Page 11: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Diretivas

Informações sobre arquivos, símbolos e tipos interpretadas no pré-processamento da compilação.

Page 12: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Diretivas

#include

Avisa ao compilador quais headers ele precisa carregar para pré-processar as instruções do arquivo em questão, mais ou menos como o import do Java

Pode ser utilizado tanto no header quanto no source. Evite incluir includes desnecessário no header, torna a etapa de análise mais custosa.

Page 13: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Diretivas

#include “my_struct.h”

int main(){ myStruct ms;}

$ g++ include.cc -I structs

#include “structs/my_struct.h”

int main(){ myStruct ms;}

$ g++ include.cc

Page 14: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Diretivas

#include <list>

#include “my_struct.h”

Procura o header nos diretórios do sistema e aqueles passados como parâmetro ao compilador.

Procura o header primeiro no diretório que contém o arquivo sendo compilado, e depois nos diretórios do sistema e aqueles passados como parâmetro ao compilador.

Page 15: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Diretivas: #define

Atribui um valor a um símbolo.Cada vez que o pré-processador encontra este símbolo no código ele substitui o símbolo por esse valor.

#define max_iterations 1000

Page 16: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Diretivas: #define

Também pode ser usado para definir “macros”, pequenos trechos de código que são colados cada vez que o pré-processador identifica o símbolo associado.

#define getmax(a,b) ((a)>(b)?(a):(b))

int main(){int x = 10;int y = getmax(x,5);//y vale 10

}

Page 17: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Diretivas: #define

#define getmax(a,b) ((a)>(b)?(a):(b))

/*int main(){int x = 10;int y = getmax(x,5);//y vale 10

}*/

int main(){int x = 10;int y = ((x)>(5)?(x):(5));//y vale 10

}

Page 18: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Diretivas: #defineQuando e por que usar Macros?

Quando o código é pequeno e existe um real conhecimento do fluxo das instruções.Desgraças podem acontecer e o código colado pelo pré-processador pode tomar um rumo inesperado.

Como o código é “colado”, não existe ônus de ter que colocar o endereço da instrução na pilha como em uma chamada de função. Em uma próxima aula discutiremos isso ao ver funções inline.

Page 19: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

namespace

Estabelecem o domínio ao qual declarações (classes, structs, metaclasses) fazem parte.

É utilizado para organizar o código em diferentes domínios, que dependendo da estrutura de diretórios do código fonte, podem apresentar uma semelhança com a organização em pacotes do java.

Também serve para eliminar ambigüidades.

Page 20: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

namespace

#include <list>#include “my_list.h”

int main(){std::list<int> list1;list<int> list2;

}

Page 21: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

usingUsada para suprimir a declaração de namespaces no código.

#include <list>#include <iostream>#include “my_list.h”

using namespace std;

int main(){cout<<”hello world”<<endl; //ok!list<int> list1; //ambigüidadelist<int> list2; //ambigüidade

}

Page 22: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Diretivas: namespace

#include <list>#include “data_structure/my_list.h”#include <iostream>

using namespace std;

int main(){cout<<”hello world”<<endl; //ok!std::list<int> list1; //okdata_structure::list<int> list2; //ok

}

Page 23: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

typedef

Define um tipo a partir de outro existente.

#include <list>#include “data_structure/my_list.h”#include <iostream>

using namespace std;typedef data_structure::list<int> mylist;

int main(){cout<<”hello world”<<endl; //ok!list<int> list1; //ok - std::listmylist list2; //ok - data_structure::list

}

Page 24: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Tipos Primitivos

Inteiros com e sem sinal e bits de representação:

char, unsigned char: 8 bitsshort, unsigned short: 16 bitsint, unsigned int: 32 bitslong, unsigned long: 32 bitslong long, unsigned long long: 64 bits

Page 25: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Tipos Primitivos

Ponto flutuante e bits de representação:

float: 32 bitsdouble: 64 bits

Page 26: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Ponteiros e referências

int a = 10;//aloca espaço para a variável aint * b = &a; /*cria um ponteiro b para números inteiros. Um ponteiro aloca espaço para e o reserva para armazenar um endereço. */

memória

10

a

b

6

Page 27: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Variáveis, Ponteiros e Referências

#include <iostream>

int main(){

int a = 5;

int * b = &a;

std::cout<<”O valor de a é”<<a<<” o endereço de a é“<<&a<<std::endl;

std::cout<<”b contém o endereço”<<b<<” o conteúdo do endereço de b é:”<<*b<<std::end;

}

Page 28: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Variáveis, Ponteiros e Referências

*b += a; a *= (*b);std::cout<<a<<std::endl;//O que foi impresso??

Page 29: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Variáveis, Ponteiros e Referências

• Uma referência é como um “apelido” a uma outra variável.

• Tal qual um ponteiro, a referência apenas “referencia” algum endereço de memória.

• Uma vez criada, não há como distinguir entre uma referência e o dado por ela referenciado.

• Adicionalmente, uma referência só pode “apontar para” um único dado durante sua existência.

Page 30: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Variáveis, Ponteiros e Referências

int main(){

int a = 3;

int b = 4;

int * p = &b;

int & r = b;

r += 2; // b agora vale 6

p = &a; // p aponta para “a”

r = a; // b agora vale 3; r ainda //referencia b.

}

Page 31: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Arrays – Alocação Estática

int main(){int a[5];a[0] = 0;a[4] = -3;

}

Page 32: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Arrays – Alocação dinâmica

int main(){int a =5;int * b = new int[a];

}

Page 33: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Arrays - Iterando;

int main(){

int a = 5;

int * b = new int[a];

int * it = &b[0];

(*it++) = 8; //Quais operações são executadas nessa linha?

}

Page 34: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Arrays - Iterando;

int * it = &b[0]; //faz o iterador apontar para o endereço da posição 0 de b;

//int * it = b;

(*it++) = 8;

//(*it) = 8 atribui o valor 8 a posição 0 do array b

//incrementa o iterador, fazendo-o apontar para a posição 1 de b

Page 35: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Arrays - Iterando;

int * it = &b[0]; //faz o iterador apontar para o endereço 9;

(*it) = 8; //atribui o valor 8 ao dado contido no endereço 9

it++;//incrementa o iterador, fazendo-o apontar para o endereço 10

it

Array “b”

0

8

16

Page 36: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Statements

if( expressão booleana ){//se a expressão é verdadeira executa

este bloco

} else{

//se a expressão é falsa executa este bloco

}

Page 37: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Statements

while( expressão booleana ){//enquanto a expressão for verdadeira

executa este bloco

}

do{//enquanto a expressão for verdadeira

executa este bloco

}while( expressão booleana );

Page 38: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Statements

for( inicialização de variáveis ; expressão ; operação executada a cada loop ){

//Para cada vez que a expressão for verdadeira, executa esse bloco. Se a expressão for falsa, sai do bloco.

}

Page 39: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

enumerationsColeção de constantes definidas pelo usuário

enum Paises{

Argentina,

Brasil,

China,

Estados Unidos,

Inglaterra

}

Page 40: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

enumerationsColeção de constantes definidas pelo usuário

enum Paises{

Argentina=9,

Brasil=6,

China=5,

Estados Unidos=13,

Inglaterra=10

}

Page 41: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

switch case:int a;

switch (a){

case:1

//se a vale 1, executa este bloco

break;

case:1

//se a vale 1, executa este bloco

break;

default:

//se a vale qualquer outro inteiro, executa este bloco

}

Page 42: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

Paises pais = Brasil;

std::cout<<”O nome do nativo de cada pais”<<std::endl;

switch (pais){

case : Argentina

std::cout<<”Argentino”<<std::endl;

break;

case: Brasil

std::cout<<”Brasileiro”<<std::endl;

Break;

case : China

std::cout<<”Chinês”<<std::endl;

break;

case: Estados Unidos

std::cout<<”Americano”<<std::endl;

Break;

case: Inglaterra

std::cout<<”Inglês”<<std::endl;

break;

default:

std::cout<<”Nacionalidade não encontrada”<<std::endl;

}

Page 43: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

enumerations

enum Paises{

Argentina=1,

Brasil, //corresponderá a 2

China, //corresponderá a 3

Estados Unidos=2,

Inglaterra //corresponderá a 2

}

Page 44: The Cyclops Project - UFSC · Histórico Criada por Bjarne Stroustrup em 1979 no Bell Labs da AT&T e inicialmente chamada de “C with classes”. Em 1983 passou a ser chamada C++

FIM AULA 1