/***************************************************************************** *** FILE: managed_op_value.cpp *** DATE: 04/10/2004 *** AUTHOR: Daniel Dementiev *** GOAL: This example show how to overload some operators for value *** managed type. *** To build the project run: *** ...> cl managed_op_value.cpp /clr *****************************************************************************/ #using using namespace System; __value class Complex { private: double x, y; public: Complex(double X, double Y) : x(X), y(Y) {}; void print() { Console::WriteLine(S"{0}+{1}*i", x.ToString(), y.ToString()); }; // ------------- operators ------------- static Complex& op_Addition(Complex& l, Complex& r) { return Complex(l.x+r.x, l.y+r.y); }; static Complex& op_Subtraction(Complex& l, Complex& r) { return Complex(l.x-r.x, l.y-r.y); }; static Complex& op_UnaryNegation(Complex& r) { return Complex(-r.x, -r.y); }; static Complex& op_Multiply(Complex& l, double r) { return Complex(r*l.x, r*l.y); }; static Complex& op_Multiply(double r, Complex& l) { return Complex(r*l.x, r*l.y); }; }; void main() { Complex a(1, 3), b(2, 1), c; c = a + b; c.print(); c = 3 * c; c.print(); }