Sunteți pe pagina 1din 63

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Linguagem C++
Linguagem C++ para Desenvolvimento em Qt

Prof. Ricardo Reis


Universidade Federal do Ceara Campus de Quixada

12 de marc o de 2013

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

1 2 3 4 5 6 7

Preliminares Elementos Basicos Classes Sobrecarga Heranc a Templates Strings e Conteiners

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Topicos
1 2 3 4 5 6 7

Preliminares Elementos Basicos Classes Sobrecarga Heranc a Templates Strings e Conteiners

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

A Linguagem C++

Bjarne Stroustrup desenvolveu o C++ + Orientac a Objetos) Multi-paradigma (Modulac ao ao Compilada setembro de 2011 (C++11 ou Mais recente especicac ao: C++0x)

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Framework Qt

Trolltech Nokia Digia Uso Comercial e Livre (Qt Project) Multiplataforma Muitos Modulos (QtCore, QtGUI, QtMultimedia, QtNetwork e etc) Qt Creator IDE

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Mundo, em C++ puro Alo

ALO-MUNDO-PURO.cpp
1 2 3 4 5 6 7 8

# include <iostream > using namespace std; int main () { cout << "Ola Mundo " << endl; return 0; }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Mundo, com UI Qt Alo

ALO-MUNDO-QT.cpp
1 2 3 4 5 6 7 8

# include <QtGui > int main( int argc , char *argv []) { QApplication app(argc , argv ); QLabel label ("Alo , Mundo !"); label .show (); return app.exec (); }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Instalac ao

C++ puro
No Linux, g++, via repositorio ou instalador No Windows, Projeto MinGW + MSYS IDEs: eclipse, netbeans, code::blocks, Editores PlanText (notepad, gedit e etc).

Framework Qt: Instalador inclui Biblioteca + Qt Creator IDE (Linux, Windows e MacOS)

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

C++ pura Compilac ao

g++ arq1.cpp arq2.cpp main.cpp


Prof. Ricardo Reis Linguagem C++ Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Qt, linha de comando Compilac ao

Criar pasta vazia e inserir os arquivos .cpp e .h do projeto. Na linha de comando, nesta pasta, deve-se,
1 2 3

$ qmake -project % cria projeto $ qmake % cria makeles $ make % compila

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Qt Creator, Projeto C++

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Qt Creator, Compilac ao

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Topicos
1 2 3 4 5 6 7

Preliminares Elementos Basicos Classes Sobrecarga Heranc a Templates Strings e Conteiners

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Como em Linguagem C ...

reconhecidos em Todos os elementos da linguagem C sao C++. Algumas fam lias de recursos foram extendidas (como ` orientac operadores) e outras foram criadas (relacionadas a ao a objetos).

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Algumas Novidades do C++


Possui um tipo logico bool e as palavras-chave true e false (ainda equivalentes a numeros). de inteiros de 64-bit, o long long Suporta representac ao do C ja suportam). (novas versoes de contadores. Exemplo, O lac o for permite denic ao
1 2

for ( int k = 0; k<n; k++) \\...

As bibliotecas do C podem ser utilizadas. Usar um c prexo ao antigo nome sem o .h,
1 2 3

# include <cstdio > # include <cstdlib > ...

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Namespaces

uma denic de escopo utilizada para Um namespace e ao resolver problemas de nomes. Recursos de mesmo nome podem ser alocados em namespaces de nomes distintos permitindo que sejam utilizados num mesmo contexto. Recursos de nomes distintos podem ser espalhados em namespaces de mesmo nome denidos em lugares diferentes.

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Exemplo de Namespaces
NAMESPACES.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

namespace abc { void print ( int x, int y) { cout << x+ y << endl; } }; namespace xyz { void print ( int x, int y) { cout << x*y << endl; } }; using xyz :: print ; int main () { abc :: print (12 , 8); print (12 , 8); return 0; }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Entrada e Sa da
necessario? O que e
1 2

# include <iostream > using namespace std;

cout
1 2 3

cout << 23; cout << x + y << endl; cout << " Total a pagar :" << total << \n;

cin
1 2

cin >> x; cin >> a >> b >> c;

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Dinamica Alocac ao
dos tradicionais * e & o C++ possui novos operadores Alem (new) e desalocac especializados em alocac ao ao (delete/delete []) de memoria.
MEM-DIN.cpp
1 2 3 4 5 6 7 8

int main () { int *k = new int ; int *u = new int [20]; for ( int i = 0; i <20; i++) u[i] = i*i+1; delete k; delete [] u; }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Referencias
um ponteiro impl Uma referencia e cito.
REFERENCIAS.cpp
1 2 3 4 5 6 7 8 9 10 11 12

# include <iostream > void swap( int &a, int &b) { int t = a; a = b; b = t; } int main () { int i = 25, j = 7; int &r = i; // Nova referencia r *= 2; swap(i, j); std :: cout << i << " " << j << std :: endl; return 0; }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Retornando Referencias
RET-REF.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14

# include <iostream > int v[5]; int & get( int k) { static int dummy = -1; return k >=0 && k <5 ? v[k] : dummy ; } int main () { for ( int k=0; k <10; k++) get(k) = 2*k + 1; for ( int k=0; k <10; k++) std :: cout << get(k) << " "; return 0; }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Topicos
1 2 3 4 5 6 7

Preliminares Elementos Basicos Classes Sobrecarga Heranc a Templates Strings e Conteiners

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Classes

FNC-MEMBROS.cpp
1 2 3 4 5 6 7 8 9 10

class X { // ... int oi () { /* ... */ }; // inline void ola (); // ... }; void X:: ola () { // ... }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Membros de Classes
MB-DADOS.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

# include <iostream > class frac { int num; int den; public : void load( int a, int b) { num = a; den = b; } void print () { std :: cout << num << / << den << \n; } }; int main () { frac x; x.load (3, 2); x. print (); return 0; }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Construtores e Destrutores
CONSTRUT-DESTRUT.cpp
3 4 5 6 7 8 9 10

class frac { int num; int den; public : frac( int a, int b) { num = a; den = b; } void print () { std :: cout << num << / << den << \n; } frac () { std :: cout << " morri !" << num << std :: endl; } };

13 14 15 16 17

frac x(3, 2); // frac x = frac (3, 2); x. print (); frac *pt = new frac (5, 9); pt -> print (); delete pt;

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Sobrecarga de Construtores
S-CONSTRUTORES.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

# include <iostream > # include <cmath > using namespace std; class Point { int xVal , yVal; public : Point ( float , float ); // coordenadas polares Point ( int x, int y) { xVal = x; yVal = y; cout << "1\n"; } Point ( void ) { xVal = yVal = 0; } // origem }; Point :: Point ( float len , float angle ) { xVal = ( int ) (len * cos( angle )); yVal = ( int ) (len * sin( angle )); cout << "2\n"; }
Universidade Federal do CearaCampus de Quixada

Prof. Ricardo Reis Linguagem C++

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

de Destrutores Aplicac ao
APP-DESTRUT.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

class pilha { int *dat; int m, n; public : pilha ( int _m) { m = _m; dat = new int [m]; } // ... pilha () { delete [] dat; } }; int main () { pilha p (20); return 0; }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Escopo de Classes
public: Membros acess veis aos objetos. private: Membros inacess veis aos objetos. protected: Membros inacess veis aos objetos, mas acess veis a classes herdeiras.
ESCOPO-CLASSES.cpp
1 2 3 4 5 6 7 8

class teste { private : /* ... */ public : /* ... */ protected : /* ... */ };

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Argumentos Default
ARGS-DEFAULT.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13

class Point { int xVal , yVal; public : Point ( int x = 0, int y = 0) { xVal=x; yVal=y; }; // ... }; int main () { Point p1; // mesmo que: p1(0, 0) Point p2 (10); // mesmo que: p2 (10 , 0) Point p3 (10 , 20); return 0; }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Argumento Membro Impl cito

Uso de this
MB-IMPLICITO.cpp
1 2 3 4 5 6 7

class Point { int x, y; public : Point ( int x, int y) { this ->x = x; this ->y = y; } };

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

de Membros Lista de Inicializac ao


MB-INIT-LIST.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14

class frac { int num , den; public : frac( int _n , int _d = 1) : num(_n), den(_d) {} }; class image { int width , height ; public : image ( int w, int h); }; image :: image ( int w, int h) : width (w), height (h) {}

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Membros Objetos
MB-OBJS.cpp
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

class point { int x, y; public : point ( int x, int y) { this ->x = x; this ->y = y; } void print () { std :: cout << "(" << x << ", " << y << ")"; } }; class rect { point u; point v; public : rect ( int x, int y, int w, int h): u(x,y), v(x + w, y + h) {} void print () { std :: cout << "["; u. print (); v. print (); std :: cout << "]\n"; } };
Universidade Federal do CearaCampus de Quixada

Prof. Ricardo Reis Linguagem C++

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Vetores de Objetos
impl ocorre A inicializac ao cita de objetos num vetor so de quando a classe correspondente possui uma versao precisa de argumentos. construtor que nao necessaria. Do contrario uma lista expl cita e
VEC-OBJS.cpp
24 25 26 27 28 29 30 31

// point w[3] => erro point w[3] = { point (1 ,2) , point (5 ,5) , point (9 ,11) }; // point *p = new point [6]; => erro frac vec [5] = {1, 6, 8, 3, 21}; complex teste [3] = {4, -1.9, 0.1}; complex d[5]; complex *q = new complex [13]; delete [] q;

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Topicos
1 2 3 4 5 6 7

Preliminares Elementos Basicos Classes Sobrecarga Heranc a Templates Strings e Conteiners

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Membros Sobrecarga de Func oes


Metodos com mesmo nome, mas com prototipos diferentes. Argumentos Default podem causar ambiguidades
S-FUNCOES.cpp
1 2 3 4 5 6

class Time { // ... public : long GetTime ( void ) { /* ... */ } void GetTime ( int &hours , int &minutes , int & seconds ) { /* ... */ };

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

e Construtor de Copia, sobrecarga da Atribuic ao sobrecarga do operador []


CONSTRUT-COPIA.cpp
4 5 6 7 8 9 10 11 12 13 14 15

int *dat , n; void copy_from ( const vec& r) { delete [] dat; dat = new int [r.n]; n = r.n; for ( int k=0; k<n; k++) dat[k] = r.dat[k]; } public : vec( int n) { vec ::n = n; dat = new int [n]; } vec( const vec& ref) : dat (0) { copy_from (ref ); } vec& operator = ( const vec& ref) { copy_from (ref ); return * this ; } int & operator [] ( int k) { static int dummy ; return k >=0 && k<n ? dat[k] : dummy ;

23 24

vec x(5); for ( int k=0; k<x.len (); k++) x[k] = 2*k + 1; vec y(x); /* vec y = x */
Universidade Federal do CearaCampus de Quixada

Prof. Ricardo Reis Linguagem C++

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Topicos
1 2 3 4 5 6 7

Preliminares Elementos Basicos Classes Sobrecarga Heranc a Templates Strings e Conteiners

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Classes Derivadas

C++ permite heranc a, ou seja, novas classes (derivadas) podem ser implementadas a partir de outras classes (primitivas ou de base). C++ permite heranc a simples e multipla. C++ permite hierarquia de classes (tanto no ambito de heranc a simples como multipla).

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Exemplo de Derivac ao
EXEMPLO-DERIVACAO.cpp
4 5 6 7 8 9 10 11 12 13 14 15 16 17

class point { protected : float x, y; public : point ( float x = 0, float y = 0) { point ::x = x; point ::y = y; } friend ostream & operator << ( ostream & os , const point & p) { os << "(" << p.x << ", " << p.y << ") \n"; return os; } }; class vect : public point { public : vect( float mx , float my) : point (mx , my) {} float len () { return sqrt(x*x + y*y); } };

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Tipos de Heranc a

uma classe derivada de X entao, Se Y e publico Na heranc a publica o que e em X se mantem privado se mantem privado e o que publico em Y , o que e protegido se mantem protegido. e privados Na heranc a privada todos os recursos de X sao em Y . publico Na heranc a protegida o que e e protegido em X privado em X se se tornam protegidos em Y e o que e privado em Y . mantem

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Escopo Protegido

acessa recursos Um objeto de uma dada classe so publicos, ou seja, nem o que for privado ou protegido e acess vel. publico O que e ou protegido numa classe base e acess vel a classes derivadas, pelo menos em caso de heranc a publica ou protegida.

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Construtores e Destrutores em Classes Derivadas

de um objeto de uma dada classe pertencente a A criac ao de uma hierarquia de classes provoca a criac ao subobjetos, um para cada classe primitiva da hierarquia. dos objetos na hierarquia mencionada ocorre A construc ao desde a classe mais primitiva para a menos primitiva. dos objetos na hierarquia mencionada ocorre A destruc ao desde a classe menos primitiva para a mais primitiva.

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Exemplo de Construtores e Destrutores em Classes Derivadas


CONSTRUT-DESTRUT-DERIV.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

# include <iostream > using namespace std; struct A { A() { cout << " nasceu A\n"; } A() { cout << " morreu A\n"; } }; struct B: public A { B() { cout << " nasceu B\n"; } B() { cout << " morreu B\n"; } }; struct C: public B { C() { cout << " nasceu C\n"; } C() { cout << " morreu C\n"; } }; int main () { C* p = new C(); delete p; }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

em Classes Derivadas Sobreposic ao

(overwriting ), numa hierarquia de classes, e Sobreposic ao de um metodo o mecanismo de redenic ao da classe primitiva na classe derivada. precisam ter mesmo prototipo. Metodos sobrepostos nao mais primitivas de metodos Versoes sobrepostos ainda de escopo. podem ser acessados via resoluc ao

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

em Classes Derivadas Exemplo de Sobreposic ao


EXEMPLO-SOBRECARGA-DERIV.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

# include <iostream > struct X { void A() { std :: cout << "A void B() { std :: cout << "B }; struct Y: public X { void A() { std :: cout << "A // void B() { X::B(); } void B( int ) { std :: cout << }; int main () { X x; Y y; x.A(); x.B(); y.A(); y.B(1); y.X::B(); }

em X\n"; } em X\n"; }

em Y\n"; } "B em Y\n"; }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Precoce Versus Ligac Tardia Ligac ao ao

de chamadas de ou Binding refere-se a associac Ligac ao ao ou metodos func oes a seus respectivos enderec os de memoria. Podem ser, e Precoce ou Ligac Estatica Ligac ao ao : A ligac ao muda em denida em tempo de carregamento e nao tempo de execuc ao. e Tardia ou Ligac Dinamica Ligac ao ao : A ligac ao Uso de ponteiros. denida em tempo de execuc ao.

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Metodos Virtuais

Metodos sobrepostos numa hierarquia de classes precisam ser denidos como virtuais para habilitar a tardia. ligac ao mais Basta inserir virtual antes do prototipo da versao primitiva do metodo sobreposto na hierarquia para permitir tardia em quaisquer objetos da hierarquia (desde a ligac ao que alocados dinamicamente).

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Hierarquia de Metodos Virtuais


METODOS-VIRTUAIS.cpp
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

class animal { public : virtual void print () { std :: cout << " grrrrr \n"; }; }; class gato: public animal { public : void print () { std :: cout << " miauuuu \n"; }; }; class cachorro : public animal { public : void print () { std :: cout << " auauauauau \n"; }; }; class gato_rajado : public gato { public : void print () { std :: cout << " mrrrrrrriiiaauu \n"; } };

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Efeito da Virtualizac ao

METODOS-VIRTUAIS.cpp
21 22 23 24 25 26 27 28

animal * a[4] = { new animal (), new gato (), new cachorro (), new gato_rajado () }; for ( int k=0; k <4; k++) { a[k]-> print (); delete a[k]; }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Classes Abstratas

aquela que possui um ou mais Uma classe abstrata e metodos sem codigo. Mantidas para servirem de base a classes derivadas e para declarar ponteiros que manipulam objetos dessas tardia). classes (ligac ao impede a A inexistencia de codigo num metodo nao de objetos. instanciac ao

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Classes Abstratas Puras

Um Membro Abstrato Puro substitui o corpo da func ao por =0. Uma Classe Abstrata Pura possui pelo menos um metodo abstrato puto. podem ser instanciadas. Classes abstratas puras nao Classes derivadas de classes abstratas puras precisam reimplementar os metodos abstratos puros se nao quiserem ser abstratas puras tambem.

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Exemplo de Classe Abstrata Pura


CLASSES-ABSTRATAS.cpp
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

struct animal { virtual void som () = 0; }; struct gato: animal { void som () { std :: cout << " miiaauu \n"; } }; int main () { // animal x; x.som (); => erro! gato y; animal *p = &y; animal * q = new gato; y.som (); p->som (); q->som (); delete q; }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Topicos
1 2 3 4 5 6 7

Preliminares Elementos Basicos Classes Sobrecarga Heranc a Templates Strings e Conteiners

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Templates
func ou classes de uso Templates (gabaritos) sao oes generico. Templates recebem tipos e dados como argumentos (argumentos-template). gera codigo Um template em si nao de maquina na compilac ao. template so sera O codigo de maquina de uma func ao gerado se houver pelo menos uma chamada a ela. chamadas com argumentos-template distintos geram distintos. codigos de maquina de func oes sera O codigo de maquina de uma classe template so de objeto gerado se houver pelo menos uma denic ao desta classe. Objetos com argumentos-template distintos geram codigos de maquina de classes distintos.
Prof. Ricardo Reis Linguagem C++ Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Classes Template I
CLASSES-TEMPLATES.cpp
4 5 6 7 8 9 10 11 12 13 14 15 16 17

template < typename T> class pilha { T *dat; int capacidade , altura ; public : pilha ( int c) : capacidade (c), altura (0) { dat = new T[c]; } pilha () { delete [] dat; } void push(T x); T pop (); T top () { return dat[altura -1]; } bool empty () { return altura ==0; } bool full () { return altura == capacidade ; } };

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Classes Template II
CLASSES-TEMPLATES.cpp
19 20 21 22 23 24 25 26 27 28 29

template < typename T> void pilha <T >:: push(T x) { if (altura < capacidade ) dat[ altura ++]=x; } template < typename T> T pilha <T >:: pop () { if (altura >0) return dat[-- altura ]; }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Utilizando Classes Template


de objetos de classes Ao contrario das func oes, denic oes templates precisam declarar explicitamente seus argumentos-template,
CLASSES-TEMPLATES.cpp
32 33 34 35

pilha < char > P (40); char s[] = " abcdefghijklmn "; for ( int k=0; s[k]; k++) P.push( s[k] ); while ( !P. empty () ) { cout << P.pop (); }

CLASSES-TEMPLATES.cpp
37 38 39 40

pilha < int > Q (100); for ( int x = 123; x >0; x/=2) Q.push(x % 2); while ( !Q. empty () ) { cout << Q.pop (); } cout << endl;
Universidade Federal do CearaCampus de Quixada

Prof. Ricardo Reis Linguagem C++

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

Topicos
1 2 3 4 5 6 7

Preliminares Elementos Basicos Classes Sobrecarga Heranc a Templates Strings e Conteiners

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

A Classe String
CLASSE-STRING.cpp
7 8 9 10 11 12 13 14 15 16 17 18

string x = "ola mundo !"; for ( int k = x. length () -1; k >=0; k--) cout << x[k]; cout << endl; x[9] = ; x += " grande !"; x. replace (4, 5, " ceara "); cout << x << endl; cout << "\ nEscreva seu nome: "; cin >> x; for ( string :: iterator it = x. begin (); it != x.end (); it ++) cout << *it << " ";

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

A Classe List
CLASSE-LIST.cpp
7 8 9 10 11 12 13 14 15 16 17 18 19 20

list < int > a; for ( int k = 100; k >0; k/=2) a. push_back (k); // _front while ( !a. empty () ) { cout << a.back () << " "; a. pop_back (); // _front } list <string > x; string v[] = {"ana", " paulo ", " claudio ", "ana", " joana ", "eva"}; for ( int k = 0; k <6; k++) x. push_front ( v[k] ); x. unique (); x.sort (); for (list <string >:: iterator it = x. begin (); it != x.end (); it ++) cout << *it << endl;

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

A Classe Vector
CLASSE-VECTOR.cpp
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

ostream & operator << ( ostream & os , vector < int >& r) { for (vector < int >:: iterator it = r. begin (); it != r.end (); it ++) os << *it << " "; return os; } int main () { vector < int > x(5); //{7, 9, 11, 6}; x[0] = 12; x[1] = 9; x[2] = -7; x[3] = 2; x[4] = 78; x[5] = 67; // sem efeito for ( int k=0; k<x.size (); k++) cout << x[k] << " "; cout << endl << x << endl; while ( !x. empty () ) { cout << x.back () << " "; x. pop_back (); } }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

As Classes ofstream e ifstream


CLASSE-FSTREAM.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

# include <iostream > # include <fstream > # include <string > using namespace std; int main () { string nomes [] = {" maria ", "joao", " daniel ", " amanda ", " pedro ", " marta ", " carlos ", "ana"}; ofstream f(" nomes "); for ( int k=0; k <8; k++) f << nomes [k] << " "; f. close (); ifstream g(" nomes "); while ( !g.eof () ) { string x; g >> x; cout << x << endl; } g. close (); }

Prof. Ricardo Reis Linguagem C++

Universidade Federal do CearaCampus de Quixada

Preliminares

Elementos Basicos

Classes

Sobrecarga

Heranc a

Templates

Strings e Conteiners

A Classe Map
CLASSE-MAP.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

# include <iostream > # include <fstream > # include <string > # include <map > using namespace std; int main () { map <string , int > tab; ifstream f(" nomes .txt"); for ( string x; !f.eof (); ) { f >> x; tab[x]++; } f. close (); for (map <string , int >:: iterator it = tab. begin (); it != tab.end (); it ++) cout << it -> first << \t << it -> second << endl; }
Universidade Federal do CearaCampus de Quixada

Prof. Ricardo Reis Linguagem C++

S-ar putea să vă placă și