Was ist ein HAS_A Beziehung in C ++?

In einem Beispiel für ein C ++ Programm an, dass die Klasse Graduatestudent gehören die Mitglieder der Klasse Schüler und Berater, aber in einer anderen Weise. Durch die Definition eines Daten Member der Klasse Berater, Sie wissen, dass ein Schüler verfügt über alle Datenelemente eines Advisor darin.

Sie können jedoch nicht, dass ein sagen Graduatestudent ist ein Advisor - stattdessen sagen Sie, dass ein Graduatestudent HAT EIN Advisor. Was ist der Unterschied zwischen diesem und Erbe?

Verwenden Sie ein Auto als Beispiel. Sie könnten logisch ein Auto als eine Unterklasse von Fahrzeug zu definieren, so übernimmt es die Eigenschaften von anderen Fahrzeugen. Zur gleichen Zeit hat ein Auto einen Motor. Wenn Sie ein Auto kaufen, können Sie logisch davon ausgehen, dass Sie einen Motor als auch kaufen.

Wenn Freunde Sie fragen, mit Ihrem Fahrzeug der Wahl bei einer Kundgebung am Samstag, zu zeigen, und Sie gehen in Ihrem Auto, können sie sich nicht beschweren (auch wenn jemand anderes auf einem Fahrrad zeigt nach oben), weil ein Auto IS_A Fahrzeug.

Aber, wenn Sie zu Fuß angezeigt einen Motor trägt, werden Ihre Freunde haben Grund dich zu lachen, weil ein Motor kein Fahrzeug ist. Ein Motor fehlt bestimmte kritische Eigenschaften, die alle Fahrzeuge teilen - wie einem Ort zu fahren.

Aus Sicht der Programmierung ist die HAS_A Beziehung genauso einfach. Folgendes berücksichtigen:

Klasse Fahrzeug {} -Klasse Motor {} -Klasse Auto: public Fahrzeug {public: Motor Motor -} - Leere VehicleFn (Vehicle v) -Lücke MotorFn (Motor m) -int main (int nNumberofArgs, char * pszArgs []) {Auto Auto-VehicleFn (Auto) - // Das ist allowedMotorFn (Auto) - // Das ist nicht allowedMotorFn (car.motor) - // Das ist allowedreturn 0-}

Der Anruf VehicleFn (c) erlaubt ist, weil Auto IS_A Fahrzeug. Der Anruf MotorFn (Auto) nicht, weil Auto ist kein Motor, obwohl es enthält ein Motor. Wenn die Absicht waren die passieren Motor Teil von c an die Funktion muss dies explizit ausgedrückt werden, wie in dem Aufruf MotorFn (car.motor).

Menü