RosettaCodeData/Task/Polymorphism/Nim/polymorphism.nim

36 lines
684 B
Nim

type
Point = object
x, y: float
Circle = object
center: Point
radius: float
# Constructors
proc createPoint(x, y = 0.0): Point =
result.x = x
result.y = y
proc createCircle(x, y = 0.0, radius = 1.0): Circle =
result.center.x = x
result.center.y = y
result.radius = radius
var p1 = createPoint()
echo "p1: ", p1 # We use the default $ operator for printing
var p2 = createPoint(3, 4.2)
var p3 = createPoint(x = 2)
var p4 = createPoint(y = 2.5)
p2 = p4
p3 = createPoint()
var c1 = createCircle()
echo "c1: ", c1
var c2 = createCircle(2, 0.5, 4.2)
var c3 = createCircle(x = 2.1, y = 2)
var c4 = createCircle(radius = 10)
c1.center.x = 12
c1.radius = 5.2