nim-lecture/live/lösungen/oop/Tier.nim

63 lines
1.5 KiB
Nim

# Basisklasse Tier
type
Tier* = ref object of RootObj
name*: string # Öffentlich zugänglicher Name des Tieres
alter: int # Privates Feld für das Alter des Tieres
# Getter für das Alter
proc getAlter*(t: Tier): int =
t.alter
# Setter für das Alter mit Apostroph-Syntax
proc `alter=`*(t: var Tier, value: int) =
if value >= 0:
t.alter = value
else:
echo "Alter kann nicht negativ sein."
# Methode gibLaut für die Basisklasse
proc gibLaut*(t: Tier): string =
result = "..."
# Abgeleitete Klasse Hund
type
Hund* = ref object of Tier
# Überschreibe die Methode gibLaut für Hund
proc gibLaut*(h: Hund): string =
result = "Wuff"
# Abgeleitete Klasse Katze
type
Katze* = ref object of Tier
# Überschreibe die Methode gibLaut für Katze
proc gibLaut*(k: Katze): string =
result = "Miau"
# Hauptprogramm zum Testen
var
hund: Hund = Hund(name: "Rocky")
katze: Katze = Katze(name: "Garfield")
# Setze Alter für Hund und Katze mit Apostroph-Syntax
hund.alter = 3
katze.alter = 2
# Ausgabe der Details
echo "Name des Hundes: ", hund.name
echo "Alter des Hundes: ", hund.getAlter()
echo hund.name, " sagt: ", hund.gibLaut()
echo "\nName der Katze: ", katze.name
echo "Alter der Katze: ", katze.getAlter()
echo katze.name, " sagt: ", katze.gibLaut()
# Ändere Alter für beide Tiere mit Apostroph-Syntax
hund.alter = 4
katze.alter = 3
# Ausgabe des neuen Alters
echo "\n", hund.name, "'s neues Alter: ", hund.getAlter()
echo katze.name, "'s neues Alter: ", katze.getAlter()