Académique Documents
Professionnel Documents
Culture Documents
Origem do C++
O C++ um superconjunto da linguagem C, que foi ampliada para incorporar os conceitos da Orientao Objetos. Foi Criada por Bjarne Stroustrup. No uma linguagem puramente orientada objetos, pois permite que programas estruturados sejam tambm desenvolvidos (Linguagem Hibrida)
Origem do C++
Foi criada para permitir uma fcil migrao da programao estruturada para a orientao objetos, pois:
Permite que programadores experientes na linguagem C no tenham que aprender uma nova linguagem; Permite que programas criados na linguagem C sejam mais facilmente portados para a linguagem C++; Todo programa C vlido tambm um programa C++ Vlido (o inverso no verdadeiro)
Inovaes C++
Traz novos comandos de entrada e sada, orientados objeto. Objetos de entrada e sada:
cin: Objeto associado ao dispositivo padro de entrada (teclado); cout: objeto associado ao dispositivo padro de sada (video);
Inovaes C++
Operadores de redirecionamento:
<< : Redirecionamento de saida (da varivel para cout); >> : Redirecionamento de entrada (de cin para varivel); Exemplo: Programa ExHello.cpp
endl: tem o mesmo efeito que \n, mas no precisa estar entre
Inovaes C++
Inovaes C++
Utilize os mtodos setf() e precision(): Exemplo: Programa ExFormatNum.CPP Obs: podem ser utilizadas inclusive variveis ou constantes inteiras como argumento para precision().
Inovaes C++
O Operador & pode ser utilizado para definir parmetros por referncia implcita, ao estilo dos parmetros var da linguagem Pascal. Exemplo: programa ExRef.cpp Funes podem ser declaradas com valores default para certos argumentos, caso os mesmos no sejam passados para a funo na sua chamada. Exemplo: programa ExArgDef.cpp
Argumentos Default
Sobrecarga de Funes
Em C++ estas funes podem ter o mesmo nome! Exemplo: Programa ExSbrCrg.cpp
Sobrecarga de Funes
Exemplo:
int f(int a, int b) { ... } int f(int c, int d) { ... }
Sobrecarga de Funes
Exemplo:
void fu(int x) { ... } int fu(int x) { ... }
Sobrecarga de Funes
Exemplo:
void imprimir(char *texto) { ... } void imprimir(char *texto, int nchar = 1) { ... }
Sobrecarga de Funes
So uma forma mais compacta de codificar funes sobrecarregadas que realizam a mesma funo sobre um mesmo conjunto de dados, os quais podem aparecer com tipos diferentes durante a escrita de um programa; A funo declarada com um tipo de dado em aberto, o qual substitudo em tempo de compilao pelo tipo de dado adequado cada situao; Exemplo: Programa ExTempFunc.cpp
Operador new:
Realiza a alocao de memria; equivalente funo malloc() em C uma palavra reservada em C++, e no uma funo, como no C; Tem uma sintaxe mais simples e enxuta; No necessrio informar o tamanho a ser alocado usando sizeof(); o tamanho verificado automaticamente por new; No necessrio formatar o ponteiro resultante com a realizao de um cast;
Exemplo em C
Exemplo em C++
int main() {// Aloca um ponteiro para um double double *ptr; ptr = new double; ... }
int main() { // aloca um ponteiro para um double double *ptr; ptr = (double*) malloc(sizeof(double)); ... }
Como operador:
ptr_tipo = new tipo; exemplo:
int *ptrInt = new int;
Alocao de Vetores:
ptr_tipo = new tipo[tamanho_vetor]; exemplo:
int *ptrInt = new int[10];
Como funo:
ptr_tipo = new(tipo); exemplo:
int *ptrInt = new(int);
Operador delete
Classes em C++
Qualificadores de Acesso
private:
Membros nesta seo podem ser acessados somente por funes membros declaradas dentro da prpri classe; o default quando nenhum qualificador especificado; membros nesta seo podem ser acessados por funes membros dentro da mesma classe e por funes membros de classes derivadas; membros nesta seo podem ser acessados por qualquer funo dentro do escopo de definio da classe.
protected:
public:
Atributos:
Podem ser qualquer tipo de dado, simples ou compostos, ou mesmo outras classes previamente definidas; So quaisquer funes definidas dentro de uma classe e que podem manipular os dados membros de uma classe;
Construtores e Destruidores
So funes que atuam implicitamente sobre os objetos no momento de sua declarao (construtores) e de sua destruio (destrutores). Construtores:
Servem para inicializar os dados membros de uma classe durante a sua declarao; Sintaxe:
No deve apresentar tipo de retorno (nem void); O nome do construtor deve ter o mesmo nome da classe a que pertence.
Construtores e Destruidores
Construtores Especiais
Construtor Default:
Quando uma classe no possui construtores definidos, o compilador cria um construtor sem cdigo e sem parmetros que chamado em cada declarao de instncia; Quando definimos pelo menos um construtor para uma classe, este construtor default no gerado! O construtor default qualquer construtor sem parmetros, seja gerado pelo compilador ou definido pelo programador;
Construtores e Destruidores
Construtor de Cpia
usado quando desejamos declarar um objeto e inicializa-lo com os valores guardados em um outro objeto j existente da mesma classe; Sintaxe:
Nome_Classe(Nome_Classe &Obj, ...);
Onde:
Obj uma referncia ao objeto que deve ser copiado para o objeto criado
As reticncias indicam que podem existir outros parmetros, mas estes devem ter valores default; Exemplo: Programa ExCls.cpp.
Construtores e Destruidores
Destruidores
So funes complementares s funes construtoras de uma classe; So executadas automaticamente quando o escopo de durao do objeto encerra-se; So responsveis por arrumar a casa depois que um objeto no mais usado (servem para desalocar memria alocada, liberar qualquer recurso, etc, visando garantir uma saida limpa; Cada classe pode ter apenas um destruidor;
Construtores e Destruidores
Sintaxe:
Na definio da classe:
class Nome_Classe { ... tipo_acesso: ~Nome_Classe(); }
Obs:
A funo destruidora no pode receber parmetros. A funo destruidora, assim como as construtoras, no pode ter nenhum tipo de retorno (nem void). Se voc no definir um destruidor, o compilador lhe fornecer um destruidor default, sem cdigo.
Arrays de Objetos
Assim como possvel se construir arrays de qualquer tipo de dados (simples ou compostos), possvel definir arrays de objetos (Lembre-se, Objetos so ADTs (Abstract Data Types Tipos Abstratos de dados TADs);
Friends
So funes externas uma dada classe que possuem a capacidade de poder acessar seus membros privados ou protegidos; Podem ser de dois tipos:
Friends
So, geralmente, funes genricas de manipulao de dados s quais desejamos enviar atributos de uma classe; Sintaxe da definio de uma friend no membro:
class Nome_Classe{ ... tipo_acesso:
...
friend prottipo_funo; };
Friends
So utilizadas quando necessrio se implementar uma conexo direta entre duas classes; Sintaxe da definio de uma friend membro de outra classe:
class Nome_Classe{ ... tipo_acesso: ... friend outra_classe::prottipo_funo_membro; };
Trata-se de uma classe que pode ter acesso aos dados membros internos de outra classe
Classes Friends
Sintaxe de definio
class A { ... }; class B { ... tipo_acesso: ... friend class A; } //// definio da classe A // definio da classe A
Classes Friends
A relao de amizade no comutativa! Se a classe A friend da classe B ento A pode acessar os dados privados de B, porm B no pode acessar os dados privados de A; Em resumo:
Classes Friends
Sobrecarga de Operadores
o mecanismo da linguagem C++ que permite a redefinio ou sobrecarga dos operadores da linguagem para permitir que certas operaes possam ser escritas de forma natural. Consiste no acrscimo de significados operadores j existentes na linguagem. aos
Sobrecarga de Operadores
Operadores Sobrecarregveis:
Todos os operadores da linguagem C++ (incluindo new e delete) podem ser sobrecarregados, com exceo dos listados abaixo:
. .* :: ?:(operador ternrio)
Restries na sobrecarga
No se podem criar novos operadores alm dos j existentes na linguagem; O operador sobrecarregado no pode alterar as regras de precedncia e associatividade estabelecidas na sua definio original Ao menos um dos parmetros da funo operadora dever ser objeto de classe
Restries na sobrecarga
Sobrecarga de Operadores
Exemplo: a sobrecarga do operador + e a sobrecarga do operador = no geram automaticamente uma sobrecarga para o operador += !
Os seguintes operadores s podem ser sobrecarregados com funo operadora membro de classe:
Sobrecarga de Operadores
Sobrecarga de Operadores
Sintaxe de declarao:
Sintaxe de definio:
Sobrecarga de Operadores
Sintaxe de declarao:
class Nome_classe{ ... friend tipo_retorno operator op(lista de parmetros);
} Sintaxe de definio:
tipo_retorno operator op(lista de parmetros) { // corpo da funo }
Herana
Herana simples: As classes so derivadas a partir de uma nica classe-base; Herana mltipla: as classes podem ser derivadas a partir de vrias classes-bases;
Herana
Herana simples:
Em C++ implementada a partir de uma declarao de hereditariedade, na qual a classe derivada declara sua classebase, o modificador de acesso da herana e a seguir declara seus membros particulares; Sintaxe:
class Nome_classe:[modificador] Nome_classe_base { // declarao dos membros da classe derivada }
Herana
Na sintaxe anterior:
O operador : especifica a declarao de herana; O modificador especifica a relao de acesso que a classe base ter com a classe derivada; Exemplo: Programa ExHeranca.cpp
Herana
Modificadores de Acesso:
Especificam o modo como as classes derivadas tm acesso sua classe-base; Os dois modificadores de acesso possveis em C++ so:
Public private
Herana
Tipo de acesso Modificador de acesso Tipo de acesso Na Classe Base Na Herana Resultante Public Public Public Private Public Inacessvel Protected Public Protected Public Private Private Private Private Inacessvel Protected Private Private
Herana
Uma classe derivada pode ter seus prprios construtores e destruidores, independentemente da sua superclasse; As classes derivadas no herdam os construtores e destruidores das superclasses; Cabe ao programador decidir como os construtores e destruidores das classes derivadas se realcionam com os das superclasses;
Herana
Relacionamentos Implcitos: Caso nada seja especificado pelo programador, o construtor da classe derivada realiza uma chamada implcita ao construtor default da superclasse; Relacionamentos Explcitos: Deve ser especificada na definio do construtor da classe derivada. A sua sintaxe :
Herana
A ordem de chamada dos destrutores ocorre em ordem inversa ordem de chamada dos construtores; Os destrutores das superclasses so chamados de forma implcita;
Herana
o mecanismo que permite que classes derivadas possam modificar mtodos que so herdados das classes bases para introduzir alteraes na sua forma de funcionamento, sem no entanto alterar a sua interface; A funo subrescrita (ou substituida) deve combinar em tipo de retorno, nome e lista de parmetros com a funo antecessora na classe base. Exemplo: Programa ExOverriding.cpp
Herana
Herana Mltipla:
Ocorre quando uma classe derivada possui duas ou mais classes base; utilizada quando se precisa combinar caractersticas de duas ou mais classes diferentes em uma nica classe; Sintaxe:
class Nome_classe:[modificador_1] Classe_Base_1, [modificador_2] Classe_Base_2, ..., [modificador_n] Classe_Base_n { // Declarao dos membros da classe};
Herana
Quando duas ou mais classes bases possuem atributos ou mtodos homnimos, e a classe derivada no sobrescreveu estes atributos ou mtodos, isto pode causar ambigidade. Para evit-la, pode-se utilizar o operador de resoluo de escopo para referir-se ao mtodo classe base correta que se deseja referenciar.
E/S em Arquivo
Arquivos em C++
O C++ permite a extenso do direcionamento de fluxo das classes streams para o armazenamento e recuperao de dados em arquivos. Programas que manipulam arquivos em C++ devem incluir o cabealho
#include <fstream.h> que contm as definies das classes que manipulam arquivos
E/S em Arquivo
ifstream: para manipulao de arquivos de entrada; ofstream: para manipulao de arquivos de sada; fstream: para manipulao de arquivos de entrada e sada;
E/S em Arquivo
FIM