intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Operator Overloading

Chia sẻ: Lavie Lavie | Ngày: | Loại File: PDF | Số trang:0

42
lượt xem
1
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Operator Overloading's Objectives is discuss operator overloading (definition, use, advantages, limitations); present type conversion operators. It presents about arithmetic operations; operator overloading; using overloaded operator; advantages of operator overloading.

Chủ đề:
Lưu

Nội dung Text: Operator Overloading

  1. Operator Overloading
  2. Objectives • Discuss operator overloading – definition – use – advantages – limitations • Present type conversion operators 2
  3. Arithmetic operations • Could define a method to perform arithmetic operation – supply as part of class or struct struct Point { int x; int y; add points public static Point Add(Point p, Point q) { return new Point(p.x + q.x, p.y + q.y); } ... } Point a = new Point(1, 2); Point b = new Point(3, 4); invoke Add Point c = Point.Add(a, b); 3
  4. Operator overloading • Can overload operators to work with class and struct types – use keyword operator – follow with symbol struct Point { int x; int y; overload + public static Point operator+(Point p, Point q) { return new Point(p.x + q.x, p.y + q.y); } ... } 4
  5. Using overloaded operator • Overloaded operator used like operators for other types – compiler translates into method call Point a = new Point(1, 2); Point b = new Point(3, 4); use operator+ Point c = a + b; 5
  6. Advantages of operator overloading • Operator overloading yields advantages for user code – concise – readable – takes advantage of user's existing knowledge of symbol Point a = new Point(1, 2); Point b = new Point(3, 4); operator Point c = a + b; method Point d = Point.Add(a, b); 6
  7. Binary operators • Binary operators take two parameters struct Point { int x; int y; binary + public static Point operator+(Point p, Point q) { return new Point(p.x + q.x, p.y + q.y); } binary - public static Point operator-(Point p, Point q) { return new Point(p.x - q.x, p.y - q.y); } ... } 7
  8. Unary operators • Unary operators take single parameter struct Point { int x; int y; unary + public static Point operator+(Point p) { return new Point(p.x, p.y); } unary - public static Point operator-(Point p) { return new Point(-p.x, -p.y); } ... } 8
  9. Mixed types • Can mix parameter types – separate method for each combination of parameter type/order struct Point { Point*int public static Point operator*(Point p, int a) { return new Point(p.x * a, p.y * a); } int*Point public static Point operator*(int a , Point p) { return new Point(a * p.x, a * p.y); } ... } 9
  10. Equality • Can overload equality and inequality – should ensure Equals method has same semantics struct Point { equality public static bool operator==(Point p, Point q) { return p.x == q.x && p.y == q.y; } inequality public static bool operator!=(Point p, Point q) { return !(p == q); } ... } Point a = new Point(1, 2); Point b = new Point(3, 4); compare points if (a == b) ... 10
  11. Operator pairs • Some operators are required to be present in pairs – == and != – > and < – >= and
  12. Compound assignment • Compound assignment operator provided automatically – when corresponding binary operator overloaded struct Point { define binary+ public static Point operator+(Point p, Point q) { return new Point(p.x + q.x, p.y + q.y); } ... } Point a = new Point(1, 2); Point b = new Point(3, 4); Point c; get operator+ c = a + b; get operator+= c += b; 12
  13. Method format • Overloaded operator must be member of class or struct • Must have specific modifiers – public – static struct Point { int x; int y; required public static Point operator+(Point p, Point q) modifiers { return new Point(p.x + q.x, p.y + q.y); } ... } 13
  14. Parameter types • At least one parameter must be of enclosing type – prevents redefinition of operators on existing type struct Point { int x; int y; error public static Point operator+(int x, int y) { return new Point(x, y); } ... } 14
  15. Limitations • Only some operators can be overloaded – unary: + - ! ~ ++ -- true false – binary: + - * / % & | ^ > == != > < >=
  16. Cross language • Not all .NET languages support operator overloading – operators therefore not available to clients in all languages – should provide regular method in addition to operator struct Point { provide operator public static Point operator+(Point p, Point q) { return Add(p, q); } provide method public static Point Add(Point p, Point q) { return new Point(p.x + q.x, p.y + q.y); } ... } 16
  17. Type conversion operators • Can overload the type conversion operators – implement user defined type converters – invoke automatically or using cast syntax Rational: 1/2 double: 0.5 int: 3 Rational: 3/1 Polar: (1, 3.14) Cartesian: (-1, 0) 17
  18. Converter syntax • Define converter using keyword operator – operator name is destination type of conversion – parameter is source of conversion struct Cartesian { ... explicit public static operator Cartesian(Polar p) { ... } } implicit required required choose one required destination source 18
  19. Implementing converter • Converter should create and return object of destination type – using data in source struct Cartesian { int x; int y; public static explicit operator Cartesian(Polar p) { create object of Cartesian c = new Cartesian(); destination type c.x = p.r * Math.Cos(p.theta); convert data c.y = p.r * Math.Sin(p.theta); return new object return c; } ... } 19
  20. Converter uses • Converter can be used whenever conversion required – assignment – parameter passing – method return 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2