Clique para editar o estilo do subtítulo mestre Linguagem de Programação III
Histórico Encapsulamento Tratamento de classes e objetos Herança Polimorfismo Comparação com Java
Histórico Desenvolvido por Bjarne Stroustrup no Bell Labs, durante a década de 1980. Inicialmente chamado de "C with Classes". Objetivo inicial implementar uma versão distribuída do núcleo Unix, que era escrito em C. 1983 - passou a se chamar C++. 1985 - lançamento da 1º edição do livro "The C++ Programming Language", contendo referências para a utilização da linguagem.
Histórico 1990 - lançamento do livro "The Annotated C+ + Reference Manual", base para o futuro padrão. 1990 - Criação da Standard Template Library (STL), por Alexander Stepanov. 1993 - Padronização da linguagem pelo comitê ANSI/ISO
#include <iostream> using namespace std; void main(){ cout << "Hello World!" << endl; cout << "Welcome to C++ Programming" << endl; }
Encapsulamento Modificadores public, private e protected. Atributos private ainda podem ser acessados por métodos alheios com permissão explícita para tanto (utilizando a palavra reservada friend). Pode ser contornado pelo uso de operações de baixo nível. Uso de ponteiros para manipulação de variáveis private (má prática de programação).
Herança Conceito de herença pública, privada e protegida. Uso de classes abstratas. Permite herança múltipla. Problemas relacionados ao uso de herança múltipla.
Tratamento de classes e objetos esquema basico: class class_name{ access_specifier_1: member1; access_specifier_2: member2;... }
Exemplo 1(métodos/funções): #include <iostream> using namespace std; class CRectangle { int x, y; public: void set_values (int,int); int area () {return (x*y);} }; void CRectangle::set_values (int a, int b) {x = a; y = b; } int main () { CRectangle rect; rect.set_values (3,4); cout << "area: " << rect.area(); return 0; }
Contrutores e destrutores class CRectangle { int *width, *height; public: CRectangle (int,int); ~CRectangle (); }; CRectangle::CRectangle (int a, int b) { width = new int; height = new int; *width = a; *height = b; } CRectangle::~CRectangle () { delete width; delete height; }
Complemento: Problemática herança múltipla - Quando um objeto da subclasse tentar referenciar diretamente o membro homônimo das superclasses, o compilador não saberá a qual classe está se referindo, causando a ambigüidade.
Complemento: Usando herança múltipla
#include <string.h> #include <iostream> using namespace std; class ClasA { protected : char nome[31]; public : void mostrar () {cout << "\nnome na Classe\t: " << nome;} }; class ClasB1 : public ClasA { public : ClasB1 (char * n = "Classe B1") {strcpy(nome,n);} void mostrar() {ClasA::mostrar();} }; class ClasB2 : public ClasA { public : ClasB2(char * n = "Classe B2") {strcpy(nome,n);} void mostrar() {ClasA::mostrar();} }; class ClasC : public ClasB1, public ClasB2 { public : void saida () { ClasB1::mostrar(); ClasB2::mostrar(); } };
Resultado Impresso: Nome na Classe: Classe B1 Nome na Classe: Classe B2 Resumindo, a duplicidade significa a existência de dois espaços em memória para um mesmo atributo ou a existência de dois caminhos para a chamada de uma função
Polimorfismo Polimorfismo estático. Sobrecarga de métodos, construtores e operadores.
Polimorfismo Polimorfismo dinâmico. Funções Virtuais Puras.
Funções virtuais(complemento) Usado para facilitar a modificação de metodos a partir de classes derivadas(exemplo polígono). Classes abstratas(complemento) Muito similar a virtual, a diferença é que se pode deixar métodos abstratos sem implementação alguma(função virtual pura)
Diferenças com Java -Não precisa ser parte de classe alguma para Executar uma função -Necessário uso do destrutor
Diferenças com Java(Sintaxe): -Declaração de classes: C++ Java -Herança: C++ Java class Bar {}; class Bar {} class Foo : public Bar {... }; class Foo extends Bar {... }
Diferenças com Java(Sintaxe): Encapsulamento: C++ public: void foo(); void bar(); Java public void foo(); public void bar(); Booleans: C++ bool foo; Java boolean foo;
Diferenças com Java(Sintaxe): -Variaveis finais(constantes): C++ const int x = 7; Java final int x = 7; -Vetores C++ int *x = new x[10]; Java int[] x = new int[10];