Linguagem de Programação I Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br
Motivação para o uso de C++ para o aprendizado de POO Quando usar C e quando usar C++ C++ versus Java Ambientes de desenvolvimento C++ C++ e POO 2
Motivação para o uso de C++ 3
Aprendizado incremental (a partir de C) Controle de recursos e desempenho Gerência de memória manual Abstrações POO + Responsabilidade Maior controle da compilação Aprender C++ facilita o aprendizado posterior de Java Mais fácil de se otimizar o desempenho C++ não é linguagem para preguiçosos Motivação para o uso de C++ 4
C Código de baixo nível (drivers, kernel) Dispositivos embarcados (suporte) Fortes requisitos de desempenho* C++ Sistemas de infraestrutura 90% dos jogos são em C++ Sistemas operacionais (Windows, *nix) Onde C/C++ não são populares... Dispositivos móveis (ios e Android) Web Quando usar C e quando usar C++ 5
Padronização C++ ISO/IEC 14882 ISO/IEC JTC1/SC22/WG21 committee C++ 11 Java Java Language Specification (Oracle) C++ versus Java 6
C++ Estende C (linguagem imperativa/procedural) Acrescenta suporte a POO de tipagem estática Tratamento de exceções Gerenciamento de escopo Metaprogramação (templates) Biblioteca padrão (STD) Write once, compile anywhere (WOCA) Java Sintaxe fortemente baseada em C/C++ Máquina virtual (JVM) Concorrência JNI Java Native Interface Write once, run anywhere (WORA) C++ versus Java 7
Assimilam alguns conceitos de POO de forma diferente http://en.wikipedia.org/wiki/comparison_of_java_and_c++ C++ versus Java 8
Hello World Declarações I/O De Structs em C a Classes em C++ 9
#include <iostream> // incluir biblioteca de IO int main() // função onde o programa é iniciado { cout << "Hello World"; // exibe "Hello World" return 0; // devolve ao SO. o valor 0 (sucesso) 10
Declarações Em ANSI C as declarações antecedem as instruções Em C99 e C++ as declarações e instruções podem se misturar Declarações na condição de uma instrução do tipo if Serve como uma restrição de escopo (o bloco definido pelo if) 11
double g(int a, double d){ return a * d; void f(double p){ int i = 0; double result; //... if (p <= 10.0) i++; //... result = g(i,p); int main(){ f(5.0); 12
double g(int a, double d){ return a * d; void f(double p){ int i = 0; //... if (p <= 10.0) i++; //... double result = g(i,p); //Declara e usa result int main(){ f(5.0); 13
Declaração dentro de if Atribuição deve iniciar condição // se get() retorna valor diferente de NULL // realiza instrução w->fire() if(weapon *w = get()) { w->fire(); Declaração em outras instruções/laços if(int i = value)...; for(...; int i = value;...)...; switch(int i = value)...; while(int i = value)...; 14
Entrada e Saída em C++ <ostream> e <istream> Operadores >> (pegar de) << (por em) printf e scanf Não são generalizáveis para tipos definidos pelo usuário 15
cin entrada padrão cout saída padrão cerr saída de erro padrão Estados stream.good() stream.eof() stream.fail() stream.bad() 16
#include <iostream> #include <string> using namespace std; int main(){ int i; while (cin >> i) // boolean - conversão implícita cout << 2*i << " "; cout << "The End"; 17
Manipuladores Aceitos pelos operadores de E/S << e >> Altera o estado do stream Ponteiro para uma função #include <iostream> #include <iomanip> #include <string> using namespace std; int main(){ cout << 17 << endl << showbase << hex << 17 << endl << oct << 17 << endl; //17 //0x11 //021 18
#include <iostream> #include <iomanip> #include <string> using namespace std; int main(){ double d = 3.12345678; cout << d << endl << scientific << d << endl << fixed << setprecision(10) << setfill('#') << setw(18) << d << endl; //3.12346 //3.123457e+00 //######3.1234567800 19
De estruturas a classes... Definir uma estrutura genérica que depois pode ter algumas de suas partes modificadas Hierarquia tipo de Ponteiros para funções Antes de nos aprofundarmos nos conceitos do paradigma OO... 20
Definindo classes/objetos em C++ Um objeto é uma instância de uma classe e referencia algo (delimitado) na memória Declarando classes em C++ Atributos Funções membro (métodos) 21
class Casa { public: int numero, numquartos; bool jardim; ; main() { Casa minhacasa; minhacasa.numero=500; minhacasa.numquartos=4; minhacasa.jardim=1; return 0; 22
class Retangulo { public: int altura, largura; int area() { return altura*largura; ; main() { Retangulo r; r.altura=5; r.largura=2; cout << r.area(); return 0; 23
class Retangulo { public: int altura, largura; int area(); ; int Retangulo::area() { return altura*largura; main() { Retangulo r; r.altura=5; r.largura=2; cout << r.area(); return 0; Sintaxe básica de C++ 24
Construtores e inicialização de variáveis de um objeto Variáveis necessárias para a realização de funcionalidades oferecidas pelo objeto Para cada membro (instância) uma inicialização distinta 25
class Retangulo { private: int altura, largura; public: Retangulo(int a, int l) { altura=a; largura=l; int area() { return altura*largura; ; main() { Retangulo r(5, 2); cout << r.area(); return 0; 26
Ambientes de desenvolvimento C++ Fundamentação de Orientação a Objetos (OO). Modelagem de sistemas orientada a objetos usando C++ Próxima aula 27
http://www.cplusplus.com/doc/tutorial/ http://gillius.org/ooptut/ http://people.cs.aau.dk/~normark/ap/bas ic-facilities.html http://linuxgazette.net/issue55/williams.h tml Referências 28
Linguagem de Programação I Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br