Note: This website is archived. For up-to-date information about D projects and development, please visit wiki.dlang.org.

Currency

Part of OperatorOverloadingCategory

Description

A currency object featuring some operator overloading.

Example

import std.stdio;
import std.string;
import std.math;


char[] leadingZeros(byte num, byte digits)
{ 
    char[] buffer;
    byte diff;
    
    buffer = toString(num);
    if (buffer.length < digits) 
    {
        diff = digits - buffer.length;
        for(int i=0; i < diff; i++)
          buffer = "0" ~ buffer;
    } 
    return buffer;
}


class Currency
{   
    /* Read property ("get-ter") */
    double value() {return intValue;}
    
    /* Write property ("set-ter") */
    double value(double v) {return intValue = v;}

    
    this(double v)
    {
        version(TEST) writefln("An instance of the Currency object is created.\n");
        intValue = v;
    }
    
    this()
    {
        this(0);

    }

    char[] toString() { return std.string.toString(intValue); } 


    /* operator overloading */

    Currency opAdd(Currency m, Currency n)
    {  
        Currency t;
        t.value = m.value + n.value;
        return t;
    }

    Currency opAddAssign(Currency m)
    {  
        intValue += m.value;
        return this;
    }


    private 
    {
        double intValue;
    }
}


void main()
{ 
    Currency c = new Currency();  
    writefln("\n\t\t\t\t\t\t%s", c.toString);

    writef("Change the value:\t\t\t\t");
    c.value = 100.75;
    writefln("%s", c.toString);

    Currency c2 = new Currency(26.12);
    writefln("\t\t\t\t\t\t%s", c2.toString);

    writef("Change the value:\t\t\t\t");
    c2.value = 6.25;
    writefln("%s", c2.toString);

    writef("Change the value (operator overloading):\t");
    c2 += c; /* requires operator overloading */

    writefln("%s\n", c2.toString);
}

Example batch file

@echo off
set pgm=CurrencyExample
dmd %pgm%.d
%pgm%.exe
pause
erase %pgm%.obj
erase %pgm%.map

Output

An instance of the Currency object is created.


                                                0
Change the value:                               100.75
An instance of the Currency object is created.

                                                26.12
Change the value:                               6.25
Change the value (operator overloading):        107

Tests

  • Tested with DMD 0.173.
  • Comiles and runs on Windows 2000.