63 lines
1.5 KiB
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()
|