- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
using big = System.Numerics.BigInteger;
class Mega
{
readonly static Type
_dbl = typeof(double),
_str = typeof(string),
_chr = typeof(char),
_int = typeof(int),
_big = typeof(big);
object o;
public Mega(object O) => o = O;
public static Mega operator +(Mega a, Mega b) {
Type ta = a.o.GetType(), tb = b.o.GetType();
if (ta == _str || tb == _str)
return new Mega(String.Concat(a.o, b.o));
if (ta == _dbl) {
if (tb == _dbl) return new Mega((double)a.o + (double)b.o);
if (tb == _chr) return new Mega((double)a.o + (char)b.o);
if (tb == _int) return new Mega((double)a.o + (int)b.o);
} if (tb == _dbl) {
if (ta == _chr) return new Mega((char)a.o + (double)b.o);
if (ta == _int) return new Mega((int)a.o + (double)b.o);
} if (ta == _int) {
if (tb == _chr) return new Mega((int)a.o + (char)b.o);
if (tb == _int) return new Mega((int)a.o + (int)b.o);
if (tb == _big) return new Mega((int)a.o + (big)b.o);
} if (ta == _big) {
if (tb == _chr) return new Mega((big)a.o + (char)b.o);
if (tb == _int) return new Mega((big)a.o + (int)b.o);
if (tb == _big) return new Mega((big)a.o + (big)b.o);
} if (ta == _chr) {
if (tb == _chr) return new Mega((char)((char)a.o + (char)b.o));
if (tb == _int) return new Mega((char)a.o + (int)b.o);
} throw new Exception("bad operators types");
} public override string ToString() => o.ToString();
}
"Некий класс Mega подразумевает совместную работу нескольких типов в одной оболочке."
// другие операторы и методы такие же, не стал копировать
COTOHuHCKuu_nemyx 25.03.2019 15:49 # 0
gost 27.03.2019 13:59 # 0