In C++ we often see constructor code like
    
    
    CircularArc2D::CircularArc2D(const CircularArc2D& arc)
    : CircularDisk2D( arc )
    {
        m_StartPoint = arc.m_StartPoint;
        m_EndPoint   = arc.m_EndPoint;
    }
    
    
    Run

Here CircularArc2D is a subclass of CircularDisk2D, and the constructor of the 
parent class is used for initialization.

Well I don't know too much about C++. But I just wonder how we would do it in 
Nim.
    
    
    type
      
      Point = object of RootObj
        x, y: float
    
    # mimic the C++ constructors
    proc initPoint(): Point =
      Point(x: -1)
    
    # mimic the C++ getters and setters
    proc getX(p: Point): float = p.x
    
    proc setX(p: var Point; v: float) =
      p.x = v
    
    # maybe another module
    
    type
      Circle = object of RootObj
        p: Point
        r: float
    
    # and now the chained constructors from C++
    proc initCircle(): Circle =
      result.p = initPoint()
    
    type
      Arc = object of Circle
        start, `end`: Point
    
    # we want the initialization from initPoint() which is not the binary zero 
default!
    proc initArc(): Arc =
      return Arc(initCircle(Circle(result)))
    
    
    Run

At least the last line does not compile. But there may be reasons why we do it 
this way, maybe Circle object is defined in another module and its fields are 
not directly accessible.

I assume this is explained somewhere already, but I can not remember or find 
it. And I do not really intent to watch all the youtube videos :-)

Reply via email to