O que é um HAS_A relacionamento em C ++?

Em um exemplo de um programa C ++, suponhamos que a classe Estudante graduado inclui os membros da classe Aluna e Orientador, mas de um modo diferente. Ao definir um membro de dados de classe Orientador, você sabe que um Aluna tem todos os membros de dados de uma Orientador dentro dele.

No entanto, você não pode dizer que um Estudante graduado é um Orientador - em vez disso você dizer que uma Estudante graduado TEM UM Orientador. Qual é a diferença entre este e herança?

Usar um carro como um exemplo. Você poderia logicamente definir um carro como sendo uma subclasse de veículo, por isso, herda as propriedades de outros veículos. Ao mesmo tempo, um carro tem um motor. Se você comprar um carro, você pode logicamente supor que você está comprando um motor bem.

Se os amigos pedir-lhe para mostrar-se em um comício no sábado com o seu veículo de escolha e você ir no seu carro, eles não podem reclamar (mesmo se alguém mostra-se em uma bicicleta), porque um veículo carro is_a.

Mas, se você aparecer no pé carregando um motor, seus amigos terão motivo para rir de você porque um motor não é um veículo. Um motor está faltando determinadas propriedades críticas que todos os veículos compartilham - como um lugar para montar.

Do ponto de vista de programação, a relação HAS_A é tão simples. Considere o seguinte:

Veículo class {} de classe Motor {} de classe Car: Veículo pública {public: Motor Motor -} - vazio VehicleFn (Vehicle v) -void MotorFn (Motor m) -int main (int nNumberofArgs, char * pszArgs []) {car-VehicleFn Car (carro) - // isso é allowedMotorFn (carro) - // isso não é allowedMotorFn (car.motor) - // este é allowedreturn 0-}

A chamada VehicleFn (c) é permitido porque carro veículo is_a. A chamada MotorFn (carro) não é porque carro não é um Motor, apesar de conter um Motor. Se a intenção fosse passar o Motor porção de c para a função, este tem de ser explicitamente expresso, como na chamada MotorFn (car.motor).

menu