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 especificac ¸ ao: C++0x) Prof. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada .

QtMultimedia. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . QtGUI.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. QtNetwork e etc) Qt Creator IDE Prof.

em C++ puro Alo ALO-MUNDO-PURO. int main () { cout << "Ola Mundo " << endl. return 0. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . } Prof.cpp 1 2 3 4 5 6 7 8 # include <iostream > using namespace std.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners ˆ Mundo.

} Prof. com UI Qt Alo ALO-MUNDO-QT. char *argv []) { QApplication app(argc . return app. QLabel label ("Alo .show ().cpp 1 2 3 4 5 6 7 8 # include <QtGui > int main( int argc . argv ).Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners ˆ Mundo. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . label . Mundo !").exec ().

Editores PlanText (notepad. netbeans. Windows e MacOS) Prof. Framework Qt: Instalador inclui Biblioteca + Qt Creator IDE (Linux.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners ˜ Instalac ¸ ao C++ puro ´ No Linux. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . via repositorio ou instalador No Windows. code::blocks. Projeto MinGW + MSYS IDEs: eclipse. gedit e etc). g++.

Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada .cpp Prof.cpp arq2.cpp main.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners ˜ C++ pura Compilac ¸ ao g++ arq1.

h do projeto. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . nesta pasta.cpp e .Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners ˜ Qt. linha de comando Compilac ¸ ao Criar pasta vazia e inserir os arquivos . Na linha de comando. 1 2 3 $ qmake -project % cria projeto $ qmake % cria makefiles $ make % compila Prof. deve-se.

Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . Projeto C++ Prof.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Qt Creator.

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 .

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.

Algumas fam´ ılias de recursos foram extendidas (como ` orientac ˜ operadores) e outras foram criadas (relacionadas a ¸ ao a objetos).. 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++. Prof..

.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). o long long Suporta representac ¸ ao ˜ do C ja ´ suportam). Exemplo. k++) \.h.. Prof. As bibliotecas do C podem ser utilizadas. 1 2 3 # include <cstdio > # include <cstdlib > . O lac ¸ o for permite definic ¸ ao 1 2 for ( int k = 0.. ˜ de inteiros de 64-bit. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . k<n. (novas versoes ˜ de contadores. Usar um c prefixo ao antigo nome sem o ..

Recursos de mesmo nome podem ser alocados em namespaces de nomes distintos permitindo que sejam utilizados num mesmo contexto.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Namespaces ´ uma definic ˜ de escopo utilizada para Um namespace e ¸ ao resolver problemas de nomes. Recursos de nomes distintos podem ser espalhados em namespaces de mesmo nome definidos em lugares diferentes. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . Prof.

8). using xyz :: print . namespace xyz { void print ( int x. return 0.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. 8). } }. int y) { cout << x*y << endl. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . print (12 . int y) { cout << x+ y << endl. } }. int main () { abc :: print (12 . } Prof.

Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . cout << x + y << endl. cin >> a >> b >> c.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 << " Total a pagar :" << total << ’\n’. cin 1 2 cin >> x. cout 1 2 3 cout << 23. Prof.

delete [] u. 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. 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. } Prof. delete k. i++) u[i] = i*i+1. i <20.

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.cpp 1 2 3 4 5 6 7 8 9 10 11 12 # include <iostream > void swap( int &a. std :: cout << i << " " << j << std :: endl. REFERENCIAS. int &b) { int t = a. int &r = i. } int main () { int i = 25. } Prof. return 0. j). // Nova referencia r *= 2. j = 7. b = t. a = b. swap(i.

Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada .cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # include <iostream > int v[5]. k++) std :: cout << get(k) << " ". for ( int k=0. return 0. k <10. int & get( int k) { static int dummy = -1. k <10. return k >=0 && k <5 ? v[k] : dummy . } int main () { for ( int k=0.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners ˆ Retornando Referencias RET-REF. } Prof. k++) get(k) = 2*k + 1.

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.

} Prof.. // . void X:: ola () { // .. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada ..Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Classes FNC-MEMBROS. }...... // inline void ola ().cpp 1 2 3 4 5 6 7 8 9 10 class X { // . */ }. int oi () { /* .

} }.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Membros de Classes MB-DADOS. return 0. x. public : void load( int a. print (). int den. } void print () { std :: cout << num << ’/’ << den << ’\n’. den = b. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . } Prof. x. 2).load (3. int main () { frac x. int b) { num = a.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # include <iostream > class frac { int num.

9). } void print () { std :: cout << num << ’/’ << den << ’\n’. 2).Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Construtores e Destrutores CONSTRUT-DESTRUT. } ˜frac () { std :: cout << " morri !" << num << std :: endl. Prof. frac *pt = new frac (5.cpp 3 4 5 6 7 8 9 10 class frac { int num. 13 14 15 16 17 frac x(3. print (). public : frac( int a. pt -> print (). den = b. x. int den. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . int b) { num = a. delete pt. 2). // frac x = frac (3. } }.

float ). Ricardo Reis Linguagem C++ . yVal = ( int ) (len * sin( angle )). cout << "1\n". // coordenadas polares Point ( int x.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Sobrecarga de Construtores S-CONSTRUTORES. int y) { xVal = x. class Point { int xVal . Point :: Point ( float len . } // origem }. cout << "2\n". public : Point ( float .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. yVal. float angle ) { xVal = ( int ) (len * cos( angle )). } Point ( void ) { xVal = yVal = 0. yVal = y. } ´ ´ Universidade Federal do CearaCampus de Quixada Prof.

public : pilha ( int _m) { m = _m. int m. } Prof.. n. int main () { pilha p (20).cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class pilha { int *dat.. ˜ pilha () { delete [] dat. } }. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . dat = new int [m].Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners ˜ de Destrutores Aplicac ¸ ao APP-DESTRUT. return 0. } // .

protected: Membros inacess´ ıveis aos objetos. */ public : /* . */ }. private: Membros inacess´ ıveis aos objetos. Prof. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada ..cpp 1 2 3 4 5 6 7 8 class teste { private : /* ..Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Escopo de Classes public: Membros acess´ ıveis aos objetos.. ESCOPO-CLASSES. mas acess´ ıveis a classes herdeiras... */ protected : /* ..

cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 class Point { int xVal . 20). return 0. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . yVal=y. // mesmo que: p2 (10 .. 0) Point p3 (10 . // mesmo que: p1(0. // . }. int main () { Point p1.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Argumentos Default ARGS-DEFAULT. } Prof. }.. 0) Point p2 (10). public : Point ( int x = 0. yVal. int y = 0) { xVal=x.

y.cpp 1 2 3 4 5 6 7 class Point { int x.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Argumento Membro Impl´ ıcito Uso de this MB-IMPLICITO. Prof. } }. int y) { this ->x = x. this ->y = y. public : Point ( int x. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada .

image :: image ( int w. height . int _d = 1) : num(_n). Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . public : frac( int _n .cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class frac { int num . height (h) {} Prof.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners ˜ de Membros Lista de Inicializac ¸ ao MB-INIT-LIST. }. class image { int width . public : image ( int w. int h) : width (w). int h). den. den(_d) {} }.

point v. ´ ´ Universidade Federal do CearaCampus de Quixada Prof. v(x + w. y + h) {} void print () { std :: cout << "[". std :: cout << "]\n". Ricardo Reis Linguagem C++ .y). int w. u. v. public : rect ( int x. " << y << ")". public : point ( int x. print (). } }.cpp 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class point { int x. } }.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Membros Objetos MB-OBJS. int h): u(x. int y) { this ->x = x. y. } void print () { std :: cout << "(" << x << ". class rect { point u. print (). int y. this ->y = y.

complex teste [3] = {4. 21}. => erro frac vec [5] = {1. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . -1.1}. Prof. delete [] q. point (9 . complex d[5]. ´ Do contrario uma lista expl´ ıcita e VEC-OBJS. complex *q = new complex [13]. point (5 .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.2) . 6. 0. 3. construtor que nao ´ ´ necessaria.cpp 24 25 26 27 28 29 30 31 // point w[3] => erro point w[3] = { point (1 .9. 8.11) }. // point *p = new point [6].5) .

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.

*/ } void GetTime ( int &hours . int &minutes ....Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners ˜ Membros Sobrecarga de Func ¸ oes ´ ´ Metodos com mesmo nome... Prof. */ }. Argumentos Default podem causar ambiguidades S-FUNCOES. int & seconds ) { /* .cpp 1 2 3 4 5 6 class Time { // .. mas com prototipos diferentes. public : long GetTime ( void ) { /* . Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada .

k<x.dat[k]. } public : vec( int n) { vec ::n = n. for ( int k=0. } vec& operator = ( const vec& ref) { copy_from (ref ).cpp 4 5 6 7 8 9 10 11 12 13 14 15 int *dat . 23 24 vec x(5).len (). sobrecarga da Atribuic ¸ ao sobrecarga do operador [] CONSTRUT-COPIA. return * this . k<n. } int & operator [] ( int k) { static int dummy . dat = new int [r. Ricardo Reis Linguagem C++ .n. /* vec y = x */ ´ ´ Universidade Federal do CearaCampus de Quixada Prof. n = r. k++) x[k] = 2*k + 1. } vec( const vec& ref) : dat (0) { copy_from (ref ). k++) dat[k] = r.n]. vec y(x). void copy_from ( const vec& r) { delete [] dat. dat = new int [n].Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners ´ ˜ e Construtor de Copia. for ( int k=0. return k >=0 && k<n ? dat[k] : dummy . n.

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 .

´ C++ permite heranc ¸ a simples e multipla. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . ou seja. Prof.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Classes Derivadas C++ permite heranc ¸ a. ˆ C++ permite hierarquia de classes (tanto no ambito de ´ heranc ¸ a simples como multipla). novas classes (derivadas) podem ser implementadas a partir de outras classes (primitivas ou de base).

} }. class vect : public point { public : vect( float mx . point ::y = y.cpp 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class point { protected : float x. } }. my) {} float len () { return sqrt(x*x + y*y).y << ") \n". } friend ostream & operator << ( ostream & os . return os. Prof. float my) : point (mx . const point & p) { os << "(" << p. y. " << p. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . public : point ( float x = 0.x << ". float y = 0) { point ::x = x.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners ˜ Exemplo de Derivac ¸ ao EXEMPLO-DERIVACAO.

mantem Prof. ´ 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 . o que e ´ protegido se mantem ´ protegido. e ˜ privados Na heranc ¸ a privada todos os recursos de X sao em Y . ˜ 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 . 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.

Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Escopo Protegido ´ acessa recursos Um objeto de uma dada classe so ´ ´ publicos. Prof. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . pelo menos em caso de ´ heranc ¸ a publica ou protegida. 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. ou seja.

um para cada classe primitiva da hierarquia. ˜ dos objetos na hierarquia mencionada ocorre A destruc ¸ ao desde a classe menos primitiva para a mais primitiva. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . ˜ dos objetos na hierarquia mencionada ocorre A construc ¸ ao desde a classe mais primitiva para a menos primitiva. Prof.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.

Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Exemplo de Construtores e Destrutores em Classes Derivadas CONSTRUT-DESTRUT-DERIV. delete p. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . } Prof. struct B: public A { B() { cout << " nasceu B\n". } ˜A() { cout << " morreu A\n". struct C: public B { C() { cout << " nasceu C\n". struct A { A() { cout << " nasceu A\n". } ˜C() { cout << " morreu C\n". } }. int main () { C* p = new C(). } }.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # include <iostream > using namespace std. } ˜B() { cout << " morreu B\n". } }.

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 redefinic ¸ ao da classe primitiva na classe derivada. ´ ˜ precisam ter mesmo prototipo. podem ser acessados via resoluc ¸ ao Prof. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . ´ Metodos sobrepostos nao ˜ mais primitivas de metodos ´ Versoes sobrepostos ainda ˜ de escopo.

} "B em Y\n".B(1). struct Y: public X { void A() { std :: cout << "A // void B() { X::B().A(). Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada .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 }.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners ˜ em Classes Derivadas Exemplo de Sobreposic ¸ ao EXEMPLO-SOBRECARGA-DERIV. } void B( int ) { std :: cout << }. } em X\n".B(). int main () { X x. x.A(). } em X\n". } Prof. x. y. Y y.X::B(). y. y. } em Y\n".

Prof. ˜ e ´ ˜ Precoce ou Ligac ˜ Estatica ´ Ligac ¸ ao ¸ ao : A ligac ¸ ao ˜ muda em definida em tempo de carregamento e nao ˜ tempo de execuc ¸ ao. ˜ e ´ ˜ Tardia ou Ligac ˜ Dinamica ˆ Ligac ¸ ao ¸ ao : A ligac ¸ ao ˜ Uso de ponteiros. Podem ser. definida em tempo de execuc ¸ ao. 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.

Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners ´ Metodos Virtuais ´ Metodos sobrepostos numa hierarquia de classes precisam ser definidos 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). Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . Prof.

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

˜ podem ser instanciadas. Prof. Classes abstratas puras nao Classes derivadas de classes abstratas puras precisam ´ ˜ reimplementar os metodos abstratos puros se nao ´ quiserem ser abstratas puras tambem. 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.

som ().cpp 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 struct animal { virtual void som () = 0.som (). => erro! gato y.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Exemplo de Classe Abstrata Pura CLASSES-ABSTRATAS. animal * q = new gato. } }. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . y. struct gato: animal { void som () { std :: cout << " miiaauu \n". int main () { // animal x. q->som (). p->som (). x. }. } Prof. animal *p = &y. delete q.

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.

Templates recebem tipos e dados como argumentos (argumentos-template). Prof.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Templates ˜ func ˜ ou classes de uso Templates (gabaritos) sao ¸ oes ´ generico. chamadas com argumentos-template distintos geram ´ ´ ˜ distintos. Objetos com argumentos-template distintos ´ ´ geram codigos de maquina de classes 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 definic ¸ ao desta classe. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . ´ ´ ˜ template so ´ sera ´ O codigo de maquina de uma func ¸ ao gerado se houver pelo menos uma chamada a ela. ˜ gera codigo ´ ´ Um template em si nao de maquina na ˜ compilac ¸ ao.

altura (0) { dat = new T[c]. altura . } bool empty () { return altura ==0. public : pilha ( int c) : capacidade (c). } bool full () { return altura == capacidade . Prof.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Classes Template I CLASSES-TEMPLATES. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . } }. T pop (). int capacidade . } void push(T x). } ˜ pilha () { delete [] dat. T top () { return dat[altura -1].cpp 4 5 6 7 8 9 10 11 12 13 14 15 16 17 template < typename T> class pilha { T *dat.

Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada .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.altura ].Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Classes Template II CLASSES-TEMPLATES. } template < typename T> T pilha <T >:: pop () { if (altura >0) return dat[-. } Prof.

definic ¸ oes templates precisam declarar explicitamente seus argumentos-template. empty () ) { cout << P. for ( int x = 123. while ( !P. ´ ´ Universidade Federal do CearaCampus de Quixada Prof.cpp 37 38 39 40 pilha < int > Q (100).cpp 32 33 34 35 pilha < char > P (40). Ricardo Reis Linguagem C++ .pop (). empty () ) { cout << Q. s[k].push( s[k] ). CLASSES-TEMPLATES. k++) P. x >0.pop (). } CLASSES-TEMPLATES. for ( int k=0. while ( !Q. char s[] = " abcdefghijklmn ".push(x % 2). } cout << endl.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners Utilizando Classes Template ´ ˜ ˜ de objetos de classes Ao contrario das func ¸ oes. x/=2) Q.

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 .

cin >> x. k--) cout << x[k]. it ++) cout << *it << " ". Prof.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners A Classe String CLASSE-STRING. cout << x << endl.cpp 7 8 9 10 11 12 13 14 15 16 17 18 string x = "ola mundo !". begin (). it != x. cout << endl. k >=0. length () -1. for ( int k = x. cout << "\ nEscreva seu nome: ". 5. replace (4. Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . " ceara ").end (). x. x[9] = ’ ’. for ( string :: iterator it = x. x += " grande !".

push_front ( v[k] ).Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners A Classe List CLASSE-LIST. " claudio ". "ana". " paulo ". pop_back (). Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . x. Prof. k <6. "eva"}. for ( int k = 0. empty () ) { cout << a.back () << " ". push_back (k).end (). // _front } list <string > x.sort (). unique (). it ++) cout << *it << endl. string v[] = {"ana". k >0. a. k/=2) a. x.cpp 7 8 9 10 11 12 13 14 15 16 17 18 19 20 list < int > a. begin (). it != x. " joana ". k++) x. for ( int k = 100. // _front while ( !a. for (list <string >:: iterator it = x.

while ( !x. //{7. k++) cout << x[k] << " ". x[5] = 67. x[0] = 12. x. pop_back (). Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . x[2] = -7. empty () ) { cout << x. } int main () { vector < int > x(5).size (). it != r. vector < int >& r) { for (vector < int >:: iterator it = r. 11. // sem efeito for ( int k=0.cpp 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ostream & operator << ( ostream & os . } } Prof. 6}. k<x. begin (). x[1] = 9.back () << " ". x[3] = 2.end (). return os. it ++) os << *it << " ". x[4] = 78. 9.Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners A Classe Vector CLASSE-VECTOR. cout << endl << x << endl.

Ricardo Reis Linguagem C++ ´ ´ Universidade Federal do CearaCampus de Quixada . " amanda ".eof () ) { string x. close (). " carlos ". g >> x. k++) f << nomes [k] << " ". } g.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. " pedro ". " daniel ". "ana"}. for ( int k=0. f. int main () { string nomes [] = {" maria ". } Prof. close (). ifstream g(" nomes "). while ( !g. "joao".Preliminares ´ Elementos Basicos Classes Sobrecarga Heranc ¸a Templates Strings e Conteiners As Classes ofstream e ifstream CLASSE-FSTREAM. k <8. cout << x << endl. " marta ". ofstream f(" nomes ").

tab[x]++. it ++) cout << it -> first << ’\t’ << it -> second << endl. begin (). ifstream f(" nomes . int >:: iterator it = tab.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. } ´ ´ Universidade Federal do CearaCampus de Quixada Prof. for ( string x. it != tab.txt"). int main () { map <string . } f. Ricardo Reis Linguagem C++ . for (map <string . ) { f >> x. int > tab. close ().eof (). !f.end ().