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_baseeste 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 derivadaO exemplo que segue ilustra esta parte conceitual:
public public public protected public protected public private private protected private private
É 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_basesNo 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.
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)
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
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