|
|
Structs
/csbook/solutions/08/A01.cs
using System;
struct Complex {
double re;
double im;
public Complex(double re, double im) {this.re = re; this.im = im;}
public Complex(double re) : this(re, 0) {}
public double Re {
get { return re; }
set { re = value; }
}
public double Im {
get { return im; }
set { im = value; }
}
public override string ToString() {
return String.Format("{0:f2}+{1:f2}i", re, im);
}
public override bool Equals(object obj) {
return this == (Complex)obj;
}
public override int GetHashCode() {
return ((int)re) ^ ((int)im);
}
public static Complex operator + (Complex x, Complex y) {
return new Complex(x.re + y.re, x.im + y.im);
}
public static Complex operator - (Complex x, Complex y) {
return new Complex(x.re - y.re, x.im - y.im);
}
public static Complex operator * (Complex x, Complex y) {
return new Complex(x.re * y.re - x.im * y.im, x.re * y.im + y.re * x.im);
}
public static Complex operator / (Complex x, Complex y) {
double n = y.re * y.re + y.im * y.im;
return new Complex((x.re * y.re + x.im * y.im)/n, (y.re * x.im - x.re * y.im)/n);
}
public static bool operator == (Complex x, Complex y) {
return x.re == y.re && x.im == y.im;
}
public static bool operator != (Complex x, Complex y) {
return x.re != y.re || x.im != y.im;
}
public static explicit operator double(Complex x) {
return x.re;
}
public static implicit operator Complex(double x) {
return new Complex(x, 0);
}
}
class Test {
public static void Main() {
Complex x = 1;
Complex y = new Complex(2, 1);
Console.WriteLine(x + y);
Console.WriteLine(x * y);
Console.WriteLine(y / y);
Console.WriteLine((double)y);
}
}
|
|