Orientação a Objetos - Programação em C++

Slides:



Advertisements
Apresentações semelhantes
Classes C++ Class nome da classe { private: membros privados
Advertisements

List templates Vamos considerar a lista ligada (singly linked list) O objecto da classe slink O objecto da classe slink O objecto da classe slink NULL.
1. Classes 2. Membros estáticos 1.1. Palavra chave this
Struct slink { slink* next; slink() { next=0; } slink(slink* p) { next=p; } virtual void print_me() = 0; }; next função virtual pura 1º constructor 2º
Vamos abordar o exemplo
Orientação a Objetos: Modificador Final para Métodos e Classes
Linguagem de Programação C++
Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO
Fundamentos de Programação 1
1 Aula 5 Instâncias dinâmicas. 2003/2004 Programação Orientada para Objectos 2 Instâncias… int j = 20; int f() { int const i = 10; // … } Constante automática.
1 Aula 3 Listas e iteradores (cont.). 2003/2004 Programação Orientada para Objectos 2 ListaDeInt : interface class ListaDeInt { public: typedef int Item;
Aula 8 Polimorfismo.
1 Aula 7 Herança. 2003/2004 Programação Orientada para Objectos 2 Conceitos fundamentais: Herança Polimorfismo Ligação dinâmica.
2002/2003 Programação Orientada para Objectos 1 Aula 3 Utilização de listas Melhorando a implementação das listas e iteradores Reflexão sobre interfaces.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Revisão /*======================================================*/
Vetores em c / c++: Formato geral para declaração de variáveis:
Classes Revisando: –Forma de implementação de estruturas específicas –Atributos (grupos de dados) –Métodos (conjuntos de procedimentos)
Objectos: Introdução O objecto ou classe é o conceito base de uma linguagem de programação por objectos como o C++. Tal como acontecia com as estruturas,
Curso C++ (J. Seixas) Primeiro exemplo: classe node Uma classe representando um ponto de uma rede (node) typedef long coord; typedef long seq; typedef.
Uma classe para vectores
Linguagem de Programação II
Atributos, Encapsulamento e Interface em Java
Paradigmas e Ferramentas de Desenvolvimento de Software – Revisão da linguagem C++ Lúbia Vinhas DPI - INPE.
Procedural vs. OO (Figuras Geométricas: Área do triângulo)
Programação orientada a objectos em C++
Roteiro Jogo de adivinhação Tarefa Desafio Algoritmo do jogo
Uso de parâmetros na linha de comando. Parâmetros da função main:
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
1Unidade – Estrutura Condicional CASE Algoritmos e Linguagens de Programação Estrutura Condicional CASE Faculdade INED – Abril 2007 Prof. Edwar.
{joseana, CEEIDSC Carga Horária: 60 horas Prof.: José Eustáquio Rangel de Queiroz
DSC/CCT/UFCG {joseana, Carga Horária: 60 horas Prof.: José Eustáquio Rangel de Queiroz
VETORES AULA 01 Roteiro da aula Referência ao Programa: Estrutura de Dados.  Variáveis Compostas homogenias   Objetivo: apresentar VETOR.
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
Fundamentos de Programação 1 Slides 22 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Duplamente Encadeada - Projeto com vários Arquivos”.
Orientação a Objetos - Programação em C++ Slides 11: Herança et al. (Funções Virtuais, Polimorfismo, Herança Múltipla, Funções Virtuais Puras e Classes.
1 Orientação a Objetos - Programação em C++ 2 o Slides: Relações entre objetos em C++ OO – Engenharia Eletrônica Prof. Jean Marcelo SIMÃO.
Orientação a Objetos - Programação em C++ Slides 17: Programação Visual ou Orientada a Objetos Gráficos (Formulários, Botões, Caixas de Texto etc) – Exemplificado.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ PAE: Pedro Shiguihara Professor: Dilvan Moreira.
Orientação a Objetos - Programação em C++ Slides 13: A classe Predefinida String. OO – Engenharia Eletrônica Prof. Jean Marcelo SIMÃO.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
Fundamentos de Programação 1
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
OO – Engenharia Eletrônica
Orientação a Objetos - Programação em C++
Fundamentos de Programação 1
Introdução a Programação
Aluno- monitor: Vagner Vengue
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Técnicas de Programação
Orientação a Objetos - Programação em C++
Ponteiros Parte III.
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Orientação a Objetos Programação em C++
Orientação a Objetos - Programação em C++
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Programação Orientada a Objetos
Programação de Computadores LINGUAGEM C – AULA 05 - PROF. WELLINGTON TELLES.
Programação FUNCIONAL com Scala
Transcrição da apresentação:

Orientação a Objetos - Programação em C++ OO – Engenharia Eletrônica Orientação a Objetos - Programação em C++ Slides 12: Const, Static, NameSpace e Nested Prof. Jean Marcelo SIMÃO

Métodos Const

void MinhaString::setString ( const char* s ) { #ifndef _MINHASTRING_H_ #define _MINHASTRING_H_ class MinhaString { public: MinhaString ( const char* s = "" ); ~MinhaString ( ); const char* getString ( ) const; // Sobre carga de operadores void operator = ( const char* s ); void operator = ( MinhaString& s ); bool operator == ( MinhaString& s ); private: void setString ( const char* s ); int tamanho; char* pStr; // Ponteiro para o ínicio do string. const int TAM_MAX; }; ostream &operator<<(ostream &saida, MinhaString& s); #endif . . . void MinhaString::setString ( const char* s ) { pStr = new char [ tamanho + 1 ]; strcpy ( pStr, s ); } const char* MinhaString::getString() const return pStr;

Atributos e Métodos Static

#ifndef _MINHASTRING_H_ #define _MINHASTRING_H_ class MinhaString { public: MinhaString (const char* s = ""); ~MinhaString ( ); const char* getString ( ) const; // Sobre carga de operadores void operator = (const char* s); void operator = (MinhaString& s); bool operator == (MinhaString& s); static const char* getNomeClasse(); private: void setString ( const char* s ); int tamanho; char* sPtr; // Ponteiro para o ínicio do string. static const char nomeclasse [12]; }; ostream &operator<<(ostream &saida, MinhaString& s); #endif #include "stdafx.h" #include "MinhaString.h" const char MinhaString::nomeclasse[12] = "MinhaString"; const char* MinhaString::getNomeClasse ( ) { return nomeclasse; } MinhaString::MinhaString ( const char* s ): tamanho( strlen( s ) ) setString ( s ); MinhaString::~MinhaString ( ) delete [] sPtr; void MinhaString::setString ( const char* s ) sPtr = new char[ tamanho + 1 ]; strcpy ( sPtr, s ); const char* MinhaString::getString ( ) const return sPtr; . . .

Int MinhaString::cont = 0; #ifndef _MINHASTRING_H_ #define _MINHASTRING_H_ class MinhaString { public: MinhaString (const char* s = ""); ~MinhaString ( ); const char* getString ( ) const; // Sobre carga de operadores void operator = (const char* s); void operator = (MinhaString& s); bool operator == (MinhaString& s); static const char* getNomeClasse(); static int getCont() { return cont; } private: void setString ( const char* s ); int tamanho; char* sPtr; // Ponteiro para o ínicio do string. static const char nomeclasse [12]; static int cont; }; ostream &operator<<(ostream &saida, MinhaString& s); #endif #include "stdafx.h" #include "MinhaString.h" const char MinhaString::nomeclasse[12] = "MinhaString"; Int MinhaString::cont = 0; const char* MinhaString::getNomeClasse ( ) { return nomeclasse; } MinhaString::MinhaString ( const char* s ): tamanho( strlen( s ) ) cont++; setString ( s ); MinhaString::~MinhaString ( ) cont--; delete [] sPtr; void MinhaString::setString ( const char* s ) sPtr = new char[ tamanho + 1 ]; strcpy ( sPtr, s ); const char* MinhaString::getString ( ) const return sPtr; . . . Atenção: a palavra static só aparece no .h.

#include "stdafx.h" #include "MinhaString.h" int _tmain ( int argc, _TCHAR* argv[] ) { MinhaString S1 ( "Minha primeira string soh minha." ), S2 ( "Minha segunda string soh minha." ); cout << "Programa para testar o uso de static. " << endl << endl; cout << "Neste programa há objetos da classe: " << MinhaString::getNomeClasse() << endl << endl; cout << "O objeto S1 é da classe: " << S1.getNomeClasse() << endl; cout << "O objeto S2 é da classe: " << S2.getNomeClasse() << endl; cout << endl << endl; return 0; }

#include "stdafx.h" #include "MinhaString.h" int _tmain ( int argc, _TCHAR* argv[] ) { MinhaString S1 ( "Minha primeira string soh minha." ), S2 ( "Minha segunda string soh minha." ), S3 ( “wHATAEVER." ); cout << S1.getCont() << S2.getCont() << S3.getCont() << endl << endl; cout << MinhaString::getCont() << endl << endl; cout << "Programa para testar o uso de static. " << endl << endl; cout << "Neste programa há objetos da classe: " << MinhaString::getNomeClasse() << endl << endl; cout << "O objeto S1 é da classe: " << S1.getNomeClasse() << endl; cout << "O objeto S2 é da classe: " << S2.getNomeClasse() << endl; cout << endl << endl; return 0; }

#include "stdafx.h" #include "MinhaString.h" int _tmain ( int argc, _TCHAR* argv[] ) { cout << MinhaString::getCont() << endl << endl; MinhaString S1 ( "Minha primeira string soh minha." ), S2 ( "Minha segunda string soh minha." ), S3 ( “wHATAEVER." ); cout << S1.getCont() << S2.getCont() << S3.getCont() << endl << endl; cout << "Programa para testar o uso de static. " << endl << endl; cout << "Neste programa há objetos da classe: " << MinhaString::getNomeClasse() << endl << endl; cout << "O objeto S1 é da classe: " << S1.getNomeClasse() << endl; cout << "O objeto S2 é da classe: " << S2.getNomeClasse() << endl; cout << endl << endl; return 0; }

#include "stdafx.h" #include "MinhaString.h" int _tmain ( int argc, _TCHAR* argv[] ) { cout << MinhaString::getCont() << endl << endl; MinhaString S1 ( "Minha primeira string soh minha." ); cout << S1.getCont() << endl << endl; MinhaString S2 ( "Minha segunda string soh minha." ), S3 ( “wHATAEVER." ); cout << S1.getCont() << S2.getCont() << S3.getCont() << endl << endl; cout << "Programa para testar o uso de static. " << endl << endl; cout << "Neste programa há objetos da classe: " << MinhaString::getNomeClasse() << endl << endl; cout << "O objeto S1 é da classe: " << S1.getNomeClasse() << endl; cout << "O objeto S2 é da classe: " << S2.getNomeClasse() << endl; cout << endl << endl; return 0; }

Exercício Fazer com que a classe Pessoa, do nosso “sistema de universidades” tenha um atributo estático que permita informar quantos objetos de Pessoa (ou derivadas desta) existem no sistema.

NameSpace

MinhaString.cpp MinhaString.h #ifndef _MINHASTRING_H_ #define _MINHASTRING_H_ namespace MinhasCoisasDeString { class MinhaString public: MinhaString (const char* s = ""); ~MinhaString(); const char* getString() const; // Sobre carga de operadores void operator = (const char* s); void operator = (MinhaString& s); bool operator == (MinhaString& s); const static char* getNomeClasse(); private: void setString ( const char* s ); int tamanho; char* sPtr; // Ponteiro para o ínicio do string. static const char nomeclasse [12]; }; ostream &operator<<(ostream &saida, MinhaString& s); } #endif MinhaString.cpp #include "stdafx.h“ #include "MinhaString.h" using namespace MinhasCoisasDeString; const char MinhaString::nomeclasse [12] = "MinhaString"; const char* MinhaString::getNomeClasse() { return nomeclasse; } MinhaString::MinhaString (const char* s): tamanho( strlen( s ) ) setString ( s ); MinhaString::~MinhaString() delete [] sPtr; . . . MinhaString.h

#include "stdafx.h“ #include “MinhaString.h" using namespace MinhasCoisasDeString; int _tmain(int argc, _TCHAR* argv[]) { MinhaString S1 ("Minha primeira string soh minha."), S2 ("Minha segunda string soh minha."), S3 ("Minha terceira string soh minha."); cout << "Programa para testar o uso de static. " << endl << endl; cout << "Neste programa há objetos da classe: " << MinhaString::getNomeClasse() << endl << endl; cout << "O objeto S1 é da classe: " << S1.getNomeClasse() << endl; cout << "O objeto S2 é da classe: " << S2.getNomeClasse() << endl; cout << "O objeto S3 é da classe: " << S3.getNomeClasse() << endl; cout << endl << endl; return 0; }

#include "stdafx.h“ #include “MinhaString.h" int _tmain(int argc, _TCHAR* argv[]) { MinhasCoisasDeString::MinhaString S1 ("Minha primeira string soh minha."), S2 ("Minha segunda string soh minha."), S3 ("Minha terceira string soh minha."); cout << "Programa para testar o uso de static. " << endl << endl; cout << "Neste programa há objetos da classe: " << MinhasCoisasDeString::MinhaString::getNomeClasse() << endl << endl; cout << "O objeto S1 é da classe: " << S1.getNomeClasse() << endl; cout << "O objeto S2 é da classe: " << S2.getNomeClasse() << endl; cout << "O objeto S3 é da classe: " << S3.getNomeClasse() << endl; cout << endl << endl; return 0; }

Classes Aninhadas (Nested)

#ifndef _CONJUNTOSTRINGS_H_ #define _ CONJUNTOSTRINGS _H_ namespace MinhasClasses { class ConjuntoStrings . . . public: class MinhaString MinhaString (const char* s = ""); ~MinhaString (); const char* getString () const; // Sobre carga de operadores void operator = (const char* s); void operator = (MinhaString& s); bool operator == (MinhaString& s); const static char* getNomeClasse(); private: void setString( const char* s ); int tamanho; char* sPtr; static const char nomeclasse[12]; }; void imprimeVet() const; MinhaString Vet [1000]; } #endif

#include "ConjuntoStrings.h" using namespace MinhasClasses; #include "stdafx.h" #include "ConjuntoStrings.h" using namespace MinhasClasses; const char ConjuntoStrings ::MinhaString::nomeclasse[12] = "MinhaString"; const char* ConjuntoStrings ::MinhaString::getNomeClasse() { return nomeclasse; } ConjuntoStrings ::MinhaString::MinhaString (const char* s): tamanho( strlen( s ) ) setString( s ); ConjuntoStrings ::MinhaString::~MinhaString() { delete [] sPtr; } void ConjuntoStrings ::MinhaString::setString (const char* s) sPtr = new char[ tamanho + 1 ]; strcpy ( sPtr, s ); const char* ConjuntoStrings ::MinhaString::getString() const { return sPtr; } void ConjuntoStrings::imprimeVet ( ) const // . . . . . .

#include "stdafx.h" #include “ConjuntoStrings.h" using namespace MinhasClasses; int _tmain (int argc, _TCHAR* argv[]) { ConjuntoStrings::MinhaString S1 ("Minha primeira string soh minha."), S2 ("Minha segunda string soh minha."), S3 ("Minha terceira string soh minha."); cout << "Programa para testar o uso de static. " << endl << endl; cout << "Neste programa há objetos da classe: " << MinhasListas::MinhaString::getNomeClasse() << endl << endl; cout << "O objeto S1 é da classe: " << S1.getNomeClasse() << endl; cout << "O objeto S2 é da classe: " << S2.getNomeClasse() << endl; cout << "O objeto S3 é da classe: " << S3.getNomeClasse() << endl; cout << endl << endl; return 0; }

#include "stdafx.h" #include “ConjuntoStrings.h" using namespace MinhasClasses; int _tmain (int argc, _TCHAR* argv[]) { ConjuntoStrings::MinhaString S1 ("Minha primeira string soh minha."), S2 ("Minha segunda string soh minha."), S3 ("Minha terceira string soh minha."); ConjuntoStrings CSs; cout << "Programa para testar o uso de static. " << endl << endl; cout << "Neste programa há objetos da classe: " << MinhasListas::MinhaString::getNomeClasse() << endl << endl; cout << "O objeto S1 é da classe: " << S1.getNomeClasse() << endl; cout << "O objeto S2 é da classe: " << S2.getNomeClasse() << endl; cout << "O objeto S3 é da classe: " << S3.getNomeClasse() << endl; cout << endl << endl; return 0; }

Exercício 1 Fazer com que ElementoAluno seja uma classe aninhada (privada) de ListaAlunos.

Exercício 2 Fazer com que Elemento<Tipo> seja uma classe aninhada (pública) de Lista<Tipo>.