Académique Documents
Professionnel Documents
Culture Documents
Joo Pascoal Faria (verso original) Ana Paula Rocha (verso 2004/2005) Lus Paulo Reis (verso 2005/2006 e 2006/2007)
Breve Historial
1972 Primeira verso da linguagem C criada nos laboratrios Bell (da AT&T) por Dennis Ritchie, e implementada num computador DEC PDP-11, baseada nas linguagens B e BCPL C clssico descrito no livro "The C Programming Language", por Brian Kernighan e Dennis Ritchie, dos laboratrios Bell 1978 1983
Primeira verso da linguagem C++ (pelo menos com esse nome), uma extenso ao C (sobretudo com facilidades de programao orientada por objectos) criada por Bjarne Stroustrup nos laboratrios Bell (da AT&T)
C standard (ANSI C) descrito na segunda edio do livro de Kernighan e Ritchie e aprovado pelo comit ANSI (aprovado pelo comit ISO em 1990) A linguagem de programao Java criada na Sun Microsystems, baseada em C e C++ e incorporando caractersticas doutras linguagens orientadas por objectos (em geral mais "limpa" mas menos eficiente que C++) C++ standard descrito na 3 edio do livro "The C++ Programming Language" de Bjarne Stroustup e aprovado pelo comit ISO em 1998 Criada a linguagem C# na Microsoft , baseada em Java e C++
2
1988 1995
1997 2001
Filosofia
Em "In The Design and Evolution of C++ (1994)", Bjarne Stroustrup descreve algumas regras que ele utiliza para desenvolver o C++: Desenvolvido para ser uma linguagem tipada estaticamente e de proposta geral, to eficiente e portvel como o C Suporte para mltiplos paradigmas Fornecer ao programador escolhas, mesmo que seja possvel ao programador escolher a opo errada O mais compatvel com C possvel, fornecendo transies simples para cdigo C Evita fornecer facilidades que so especficas a certas plataformas ou a certos grupos de programadores No exige overhead para facilidades que no so utilizadas. Poder ser utilizado mesmo sem um ambiente de desenvolvimento sofisticado
3
return 0;
envia o dado da direita para o stream da esquerda segue-se a conveno habitual de a funo main retornar 0 em caso de sucesso \n representa o caracter de mudana de linha (newline) sequncias comeadas com \ so sequncias de escape
helloWorld.C (Unix) ou helloWorld.cpp (Windows)
No ecr aparece:
hello, world
5
Um programa em C++
Duas formas de definir um programa em C++
int main() { ... }
Primeiras extenses ao C
Nos exemplos anteriores notam-se as seguintes extenses:
declarao de variveis em qualquer ponto de um bloco (a varivel existe at terminar a execuo do bloco) declarao de variveis na parte de inicializao do ciclo for (a varivel existe at terminar a execuo do ciclo) comentrios comeados com // (terminam no fim da linha) entrada e sada de dados mais segura e simples com streams
Notar, no entanto, que o C um subconjunto do C++, pelo que todas as features do C continuam disponveis
8
cout.put(c)
escreve um caracter no stream de sada
9
cin.get()
l um caracter do stream de entrada; no salta caracteres brancos; retorna EOF se encontrar o fim do stream (no teclado normalmente indicado com ctrl-Z em Windows e ctrl-D em Unix)
Cin uma varivel do tipo istream (input stream) definidas em "iostream.h" cout, cerr so variveis do tipo ostream (output stream) definida em "iostream.h"
11
13
O tipo string
#include <string> #include <iostream> // definies no espao de nomes std // idem
using namespace std; // traz nomes de std para global main() { string primeiro, ultimo, completo; cin >> primeiro; // l (pra em espao, tab ou newline) cin >> ultimo; // idem if (primeiro == ultimo) // compara cout << "Primeiro e ltimo nome iguais!\n"; completo = primeiro + " " + ultimo; // concatena e copia cout << completo; // escreve Mais prtico que usar return 0; arrays de caracteres! }
14
s[i] refere-se ao caracter que se encontra na posio i da string s (0 <= i <= s.length()-1) Comparao de strings faz-se com operadores de comparao habituais (>, >=, <, <=, ==, !=) getline(cin,s)
l uma linha do input para a string s o primeiro argumento tambm pode ser do tipo ifstream (ficheiro)
15
s.substr(i,n)
devolve substring de tamanho n e incio na posio i de s segundo argumento pode ser omitido (nesse caso at ao fim da string)
s1.find(s2)
devolve a posio inicial da primeira ocorrncia de s2 em s1 ou string::npos se no existir nenhuma ocorrncia de s2 em s1 s2 pode ser do tipo string ou char *
s.c_str()
d a string em C (tipo char *)
E muito mais!
16
O tipo bool
Em C, no existem booleanos, existe apenas a conveno
0 falso 0 verdadeiro
Em C++ existe o tipo bool As constantes deste tipo so true e false Booleanos so convertveis implicitamente para inteiros seguindo as convenes do C Operadores lgicos e de comparao do resultado do tipo bool
17
Mais simples do que trabalhar com apontadores! Usar quando se pretende que a funo chamada altere valores de variveis passadas na chamada
18
main()
a: 1 2 b: 2 1 x: y:
troca(a, b)
temp: 1
main()
a: 1 b: 2
troca(a, b)
x: 1 2 y: 2 1 temp: 1 a=1 b=2
19
int *yPtr)
Passa o endereo da varivel Permite que a funo chamada altere o valor (contedo) da varivel Pouco til, porque mais simples usar referncias!
troca(&a, &b); // troca valores de a e b cout << "a =" << a << '\n'; cout << "b =" << b << '\n'; }
main()
a: 1 2 b: 2 1
troca(&a, &b)
xPtr: yPtr: temp: 1
20
Passagem de argumentos
// passagem por valor troca no funciona void trocaNaoFunc(int x, int { int temp = x; x = y; y = temp; } // C uso de apontadores void trocaAp(int *x, int *y) { int temp = *x; *x = *y; *y = temp; } // C++ uso de referncias void trocaRefp(int &x, int &y) int temp =x; x = y; y = temp; }
21
y)
Passagem de argumentos
int main() { int a = 4 , b = 6; trocaNaoFunc(a,b); cout << a = << a cout << b = << b trocaAp(&a,&b); cout << a = << a cout << b = << b trocaRef(a,b); cout << a = << a cout << b = << b return 0; }
<< \n; << \n; << \n; << \n; << \n; << \n;
22
Resumo de extenses ao C
Comentrios comeados em // (vo at ao fim da linha) Definio de variveis a meio de um bloco e na parte de inicializao da instruo for Biblioteca alternativa de entrada e sada de dados baseada em streams, mais segura e mais simples Tipo string (da biblioteca standard) mais fcil de usar do que as strings built-in herdadas do C Tipo bool com valores true e false Passagem de arguments por referncia (dispensa apontadores)
23