Para ilustrar como o mecanismo de herança é implementado em C ++, considere o seguinte exemplo, onde uma classe para representar veículo é definida.
indentation
A questão agora é: como representar (por exemplo) carros e caminhões? Eles são tipos de veículos, e uma declaração de classe que simplesmente repetisse as propriedades de veículos para carros ou caminhões iria simplesmente perder esta informação. Pior ainda: se a classe de veículos fosse atualizada para introduzir uma nova propriedade (atributo ou método), esta mudança não seria refletida nas classes de carros ou caminhões. Este tipo de mudança ocorre muitas vezes em projetos de grande porte, qunado há revisões de especificação para partes do projeto; em geral, é muito difícil controlar a propagação das modificações, o que geralmente envolve diversos grupos de trabalho.
Em C ++, como em outras linguagens de programação orientadas a objetos, há um mecanismo para conectar a definição da classe derivada com a classe base. Observe abaixo como a classe para carros é definida, assumindo-se que a classe vehicle foi definida como acima.
indentation
O mecanismo para indicar que a classe car é derivada da classe vehicle é dado pela sintaxe : public, como em
Na definição da classe car, indica-se que carro tem a
mesma informação que um veículo, além de
informação adicional sobre o número de passageiros que
ele comporta. Note também que a classe car define um
método de nome initialize, que era também um
método da classe vehicle. Desta forma, quando
initialize for ativado para um carro, a nova versão é
que será ativada -- para outros veículos, a antiga
versão continua valendo. Entretanto, esta forma de
sobreposição de métodos não é aconselhada --
veja o Capítulo para mais detalhes sobre
este assunto.
Observe dos exemplos dados acima que não há nada de especial em relação a uma classe base: ela é simplesmente uma classe como qualquer outra, sem nenhuma indicação especial de que seus métodos e atributos serão herdados por outras classes. Da mesma forma, seria possível usar uma classe derivada como base para outras classes -- ou seja, toda uma hierarquia de classes pode ser implementada.
Similarmente, uma classe para representar caminhões poderia ser derivada de veículos como em
indentation
O exemplo abaixo ilustra a utilização destas classes em um programa C ++.
indentation
The unicycle has 1 wheel. The unicycle's wheel loading is 12.5 pounds on the single tire The unicycle weighs 12.5 pounds. The sedan carries 5 passengers. The sedan weighs 3500 pounds. The sedan's wheel loading is 875 pounds per tire. The semi weighs 12500 pounds. The semi's efficiency is 72.929072 percent.
É interessante que se observe que um apontador declarado para a classe base (vehicle, neste exemplo) poderia ser usado para apontar para objetos tanto da classe base quanto para objetos das classes derivadas (car e truck, neste caso). Isto concorda com a intuição sobre hereditariedade -- afinal de contas, um carro continua sendo um veículo, e ao apontar para um carro está se apontando para um veículo.