O que é uma relação has_a em c ++?

Em um exemplo de um programa C ++, suponha que a classe Estudante graduado

inclui os membros da classe Aluna e Orientador, mas de uma maneira diferente. Ao definir um membro de dados de classe Orientador, você sabe que um Aluna tem todos os membros de dados de um Orientador dentro dele.

No entanto, você não pode dizer que um Estudante graduado é um Orientador - em vez você diz 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.

Video: Funções: O Que É Função? Função como Relação entre Conjuntos | MEM #15

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 aparece em uma bicicleta), porque um veículo automóvel 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 certas propriedades críticas que todos os veículos compartilham - como um lugar para andar.

Video: Macroeconomia X Microeconomia. ECONOMIA 1.6

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 principal (int nNumberofArgs, char * pszArgs []) {carro-VehicleFn carro (carro) - // isto é allowedMotorFn (carro) - // este não é allowedMotorFn (car.motor) - // isto é 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, mesmo que ele contém uma Motor. Se a intenção fosse para passar a Motor porção de c para a função, este deve ser expressa de forma explícita, como na chamada MotorFn (car.motor).


Publicações relacionadas