Contents

Texto exemplo


Programação Orientada a Objetos em C++ (POO03)

Mais a respeito de herança


Uma class pode herdar atributos de outra class. Em termos de terminologia dizemos que uma classe que é herdada por outra é chamada de classe base ou classe mãe. A class que herda é chamada de classe derivada, ou também classe filha. Usaremos classe base e derivada. Uma class divide os seus elementos em três classificações:

Public - Um elemento public pode ser acessado por por outras funções que não pertencem a class.
Private - Só é acessado pelas funções membro ou friend da class.
Protected - Só é acessado pelas funções membro ou friend da class mas pode passar para derivadas.

A forma geral de herdar uma classe é:

               class nome_classe_derivada : acesso nome_class_base
este acesso na definição de uma classe derivada pode ser também public ou private ( se omitido assume public) e temos a seguinte regra:
	classe base		acesso		classe derivada
public public public protected public protected public private private protected private private
O exemplo que segue ilustra esta parte conceitual:
clas12.cpp no FTP ou veja aqui...
clas12.cpp

As palavras reservadas, public, private e protected podem aparecer em qualquer ordem e uma ou diversas vezes em uma estrutura ou uma classe. O que segue a palavra reservada passa a ser deste tipo. Assim tudo o que vem depois de public é publico e depois de protect é protegido e depois de private é privado.

Herança múltipla


É possível para uma classe herdar os atributos de duas ou mais classes. Para isso usamos vírgula para separar as classes bases na declaração:


	class nome_classe_derivada : lista de classes_bases
No exemplo que segue, Z herda tanto X como Y. Neste exemplo Z tem acesso a partes public e protected tanto de X como Y. Observe como o objeto i é criado e o seu uso na função main.

clas13.cpp no FTP ou veja aqui...
clas13.cpp

No exemplo anterior X, Y e Z não possuem funções construtoras. Veja a seguir, quando uma classe base contém função construtora. Veremos que as classes bases são construídas na ordem que estão na declaração da classes derivada.

clas14.cpp no FTP ou veja aqui...
clas14.cpp

Quando uma classse base contém uma função construtora que usa um ou mais argumentos, qualquer classe derivada deve conter uma função construtora. Isso é feito para se poder passar argumentos para a(s) função(ções) construtora(s) da(s) class(es) base(s). A forma de declarar é como segue:

construtor-derivado(lista-de-argumentos):base1(lista-de-argumentos),
base2(lista-de-argumentos), ...,baseN(lista-de-argumentos)

O exemplo que segue ilustra como passar argumentos para as classes bases a partir de uma classe derivada.

clas15.cpp no FTP ou veja aqui...
clas15.cpp

Passando Objetos para Funções


Um objeto pode ser passado para uma função como qualquer outro tipo de dado. Objetos são passados na convenção normal do C++ como chamadas por valor. Assim uma cópia do objeto é passada. Qualquer mudança no objeto dentro da função não afeta o objeto original usado para chamar a função. O exemplo que segue mostra esta passagem de objetos para funções: (passagem de parâmetro por valor)

clas16.cpp no FTP ou veja aqui...
clas16.cpp

Mais tarde veremos que que é possível também passar somente o endereço de um objeto para uma função. Quando um endereço é passado as alterações feitas no objeto, dentro da função, alteram o objeto usado na chamada. (passagem de parâmetros por endereço)

Matrizes de Objetos


Podemos criar matrizes de objetos da mesma forma que se cria matrizes de outros tipos de dados. O exemplo que segue estabelece uma classe vídeo que guarda informações a respeito de vários monitores de video. A classe contém o numero de cores e o tipo de adaptador. Dentro da função main uma matriz de três objetos vídeo é criada e os objetos que compreendem os elementos da matriz são acessados pelo procedimento normal de indexação.

clas17.cpp no FTP ou veja aqui...
clas17.cpp

Ponteiros para Objetos


Como sabemos do C podemos acessar uma estrutura diretamente ou por meio de um ponteiro para esta apontada. Em C++ podemos referenciar um objeto diretamente, como usamos até o momento, ou usando um ponteiro para o objeto. Assim como já usávamos para estrutura e uniões, para acessar um elemento específico de um objeto, quando se usa ponteiro para o objeto, deve-se usar a o operador seta (->). Declara-se um ponteiro para objeto, usando-se a mesma sintaxe de declaração usada para qualquer outro tipo de dado. O exemplo que segue cria uma classe chamada P_exemplo e define um objeto desta class chamado ob e um ponteiro para um objeto do tipo P_exemplo chamado p. Ilustra como acessar ob direta e indiretamente usando-se um ponteiro.

clas18.cpp no FTP ou veja aqui...
clas18.cpp

A incrementação ou decrementação de um ponteiro aqui também é válida e pode ser usada quando temos matriz de objetos. O exemplo que segue ilustra este conceito.

clas19.cpp no FTP ou veja aqui...
clas19.cpp


Contents