В бинарных операторах, хотя бы тип одного операнда должен совпадать с типом класса.
Количество операндов от двух и больше.
Знак оператора, это например + (сложение).
Количество операндов от двух и больше.
Знак оператора, это например + (сложение).
Синтаксис:
public static тип_возврата operator знак_оператора(тип_параметра операнд, тип_параметра операнд) {
//операции
return значение;
}
public static тип_возврата operator знак_оператора(тип_параметра операнд, тип_параметра операнд) {
//операции
return значение;
}
знак оператора |
название оператора |
| + | сложение |
| - | вычитание |
| * | умножение |
| / | деление |
| % | деление по модулю |
| & | логическое И |
| | | логическое ИЛИ |
| ^ | логическое исключающее ИЛИ |
| << | сдвиг влево |
| >> | сдвиг вправо |
| == | равно |
| != | не равно |
| > | больше |
| < | меньше |
| >= | больше ил равно |
| <= | меньше или равно |
объект + объект
Для примера возьмем сложение. Класс имеет два поля. Мы будем складывать только объекты.
Main.cs
usingSystem;classOne {-
inta; -
intb; -
/*конструктор изначально присваивает нулевые значения, это понадобится для -
переменной-объекта, которая будет создана в методе перегрузки*/ -
publicOne() { -
a = b = 0; -
} -
//обычный конструктор -
publicOne(intarg0,intarg1) { -
a = arg0; -
b = arg1; -
} -
//перегрузка бинарного оператора + -
//объект + объект -
publicstaticOneoperator+ (One obj0, One obj1) { -
//создаем переменную-объект, которую будет возвращать этот метод -
One Result =newOne(); -
Result.a = obj0.a + obj0.b; -
Result.b = obj1.a + obj1.b; -
returnResult; -
} -
publicintGetValueA() { -
returna; -
} -
publicintGetValueB() { -
returnb; -
} }classProgram {-
publicstaticintMain() { -
One OSum =newOne(); -
One O1 =newOne(10, 20); -
One O2 =newOne(30, 40); -
//объект + объект -
OSum = O1 + O2; -
Console.WriteLine(OSum.GetValueA()); -
Console.WriteLine(OSum.GetValueB()); -
Console.ReadKey(); -
return0; -
} }
usingSystem;classOne {-
inta; -
intb; -
/*конструктор изначально присваивает нулевые значения, это понадобится для -
переменной-объекта, которая будет создана в методе перегрузки*/ -
publicOne() { -
a = b = 0; -
} -
//обычный конструктор -
publicOne(intarg0,intarg1) { -
a = arg0; -
b = arg1; -
} -
//перегрузка бинарного оператора + -
//объект + объект -
publicstaticOneoperator+ (One obj0, One obj1) { -
//создаем переменную-объект, которую будет возвращать этот метод -
One Result =newOne(); -
Result.a = obj0.a + obj0.b; -
Result.b = obj1.a + obj1.b; -
returnResult; -
} -
publicintGetValueA() { -
returna; -
} -
publicintGetValueB() { -
returnb; -
} }classProgram {-
publicstaticintMain() { -
One OSum =newOne(); -
One O1 =newOne(10, 20); -
One O2 =newOne(30, 40); -
//объект + объект -
OSum = O1 + O2; -
Console.WriteLine(OSum.GetValueA()); -
Console.WriteLine(OSum.GetValueB()); -
Console.ReadKey(); -
return0; -
} }
30
70
70
объект + переменная
Для примера возьмем сложение. Класс имеет два поля. Мы будем складывать объект и переменную типа int.
Внимание! Это очень важно, в какой последовательности будет происходить сложение, потому что параметры метода будут расположены в такой же последовательности.
Внимание! Это очень важно, в какой последовательности будет происходить сложение, потому что параметры метода будут расположены в такой же последовательности.
Main.cs
usingSystem;classOne {-
inta; -
intb; -
/*конструктор изначально присваивает нулевые значения, это понадобится для -
переменной-объекта, которая будет создана в методе перегрузки*/ -
publicOne() { -
a = b = 0; -
} -
//обычный конструктор -
publicOne(intarg0,intarg1) { -
a = arg0; -
b = arg1; -
} -
//перегрузка бинарного оператора + -
//объект + переменная -
publicstaticOneoperator+ (One obj,intarg) { -
//создаем переменную-объект, которую будет возвращать этот метод -
One Result =newOne(); -
//обратите внимание на последовательность -
Result.a = obj.a + arg; -
Result.b = obj.b + arg; -
returnResult; -
} -
publicintGetValueA() { -
returna; -
} -
publicintGetValueB() { -
returnb; -
} }classProgram {-
publicstaticintMain() { -
One OSum =newOne(); -
One O =newOne(10, 20); -
intx = 5; -
//объект + переменная -
OSum = O + x; -
Console.WriteLine(OSum.GetValueA()); -
Console.WriteLine(OSum.GetValueB()); -
Console.ReadKey(); -
return0; -
} }
usingSystem;classOne {-
inta; -
intb; -
/*конструктор изначально присваивает нулевые значения, это понадобится для -
переменной-объекта, которая будет создана в методе перегрузки*/ -
publicOne() { -
a = b = 0; -
} -
//обычный конструктор -
publicOne(intarg0,intarg1) { -
a = arg0; -
b = arg1; -
} -
//перегрузка бинарного оператора + -
//объект + переменная -
publicstaticOneoperator+ (One obj,intarg) { -
//создаем переменную-объект, которую будет возвращать этот метод -
One Result =newOne(); -
//обратите внимание на последовательность -
Result.a = obj.a + arg; -
Result.b = obj.b + arg; -
returnResult; -
} -
publicintGetValueA() { -
returna; -
} -
publicintGetValueB() { -
returnb; -
} }classProgram {-
publicstaticintMain() { -
One OSum =newOne(); -
One O =newOne(10, 20); -
intx = 5; -
//объект + переменная -
OSum = O + x; -
Console.WriteLine(OSum.GetValueA()); -
Console.WriteLine(OSum.GetValueB()); -
Console.ReadKey(); -
return0; -
} }
15
25
25
переменная + объект
Для примера возьмем сложение. Класс имеет два поля. Мы будем складывать переменную типа int и объект.
Внимание! Это очень важно, в какой последовательности будет происходить сложение, потому что параметры метода будут расположены в такой же последовательности.
Внимание! Это очень важно, в какой последовательности будет происходить сложение, потому что параметры метода будут расположены в такой же последовательности.
Main.cs
usingSystem;classOne {-
inta; -
intb; -
/*конструктор изначально присваивает нулевые значения, это понадобится для -
переменной-объекта, которая будет создана в методе перегрузки*/ -
publicOne() { -
a = b = 0; -
} -
//обычный конструктор -
publicOne(intarg0,intarg1) { -
a = arg0; -
b = arg1; -
} -
//перегрузка бинарного оператора + -
//переменная + объект -
publicstaticOneoperator+ (intarg, One obj) { -
//создаем переменную-объект, которую будет возвращать этот метод -
One Result =newOne(); -
//обратите внимание на последовательность -
Result.a = arg + obj.a; -
Result.b = arg + obj.b; -
returnResult; -
} -
publicintGetValueA() { -
returna; -
} -
publicintGetValueB() { -
returnb; -
} }classProgram {-
publicstaticintMain() { -
One OSum =newOne(); -
One O =newOne(10, 20); -
intx = 5; -
//переменная + объект -
OSum = x + O; -
Console.WriteLine(OSum.GetValueA()); -
Console.WriteLine(OSum.GetValueB()); -
Console.ReadKey(); -
return0; -
} }
usingSystem;classOne {-
inta; -
intb; -
/*конструктор изначально присваивает нулевые значения, это понадобится для -
переменной-объекта, которая будет создана в методе перегрузки*/ -
publicOne() { -
a = b = 0; -
} -
//обычный конструктор -
publicOne(intarg0,intarg1) { -
a = arg0; -
b = arg1; -
} -
//перегрузка бинарного оператора + -
//переменная + объект -
publicstaticOneoperator+ (intarg, One obj) { -
//создаем переменную-объект, которую будет возвращать этот метод -
One Result =newOne(); -
//обратите внимание на последовательность -
Result.a = arg + obj.a; -
Result.b = arg + obj.b; -
returnResult; -
} -
publicintGetValueA() { -
returna; -
} -
publicintGetValueB() { -
returnb; -
} }classProgram {-
publicstaticintMain() { -
One OSum =newOne(); -
One O =newOne(10, 20); -
intx = 5; -
//переменная + объект -
OSum = x + O; -
Console.WriteLine(OSum.GetValueA()); -
Console.WriteLine(OSum.GetValueB()); -
Console.ReadKey(); -
return0; -
} }
15
25
25