Lập trình C# - Quá tải toán tử
Nạp chồng lớp Point theo các yêu cầu sau:
- Khai báo thuộc tính và Point
- Nạp chồng các phương thức :ToString, Equals, GetHashCode,CompareTo của lớp Object
- Nạp chồng các toán tử: +, - ( Cho phép cộng với một đối tượng Point khác, công với một số, một số công với Point, tương tự phép trừ).
- Nạp chồng các toán tử: ++, -- để cho phép tăng giảm mỗi lần 1 Point
- Nạp chồng các toán tử: ==, =!, >, <, >=, <=
- Hỗ trợ chuyển đổi kiểu tường minh và ngầm định để chuyển kiểu Point về kiểu float (double) hoặc kiểm float về kiểu Point
- Viết hàm Main để kiểm tra các phương thức trên
Bước 1: Khai báo thuộc tính và Point
public int X { get; set; }
public int Y { get; set; }
public Point(int xPos, int yPos)
{
X = xPos;
Y = yPos;
}
Bước 2: Xây dựng các phương thức :ToString, Equals, GetHashCode,CompareTo của lớp Object
public override string ToString()
{
return string.Format("[{0}, {1}]", X, Y);
}
//nạp chồng hai hàm Equals và GetHashCode
public override bool Equals(object o)
{
return o.ToString() == this.ToString();
}
public override int GetHashCode()
{
return this.ToString().GetHashCode();
}
//cài đặt giao diện IComparable
public int CompareTo(object o)
{
if (o is Point)
{
Point p = (Point)o;
if (this.X > p.X && this.Y > p.Y) return 1;
if (this.X < p.X && this.Y < p.Y) return -1;
else return 0;
}
else throw new ArgumentException();
}
Bước 3: Nạp chồng các toán tử: +, -
public static Point operator + (Point p1, Point p2)
{
return new Point(p1.X + p2.X, p1.X + p2.Y);
}
public static Point operator - (Point p1, Point p2)
{
return new Point(p1.X - p2.X, p1.Y - p2.Y);
}
public static Point operator + (Point p1, int change)
{
return new Point(p1.X + change, p1.Y + change);
}
public static Point operator - (Point p1, int change)
{
return new Point(p1.X - change, p1.Y - change);
}
Bước 4: Nạp chồng các toán tử: ++, --
public static Point operator ++(Point p1)
{
return new Point(p1.X + 1, p1.Y + 1);
}
public static Point operator --(Point p1)
{
return new Point(p1.X - 1, p1.Y - 1);
}
Bước 5: Nạp chồng các toán tử: ==, =!, >, <, >=, <=
//nạp chồng toán tử bằng sử dụng hàm Equals
public static bool operator == (Point p1, Point p2)
{
return p1.Equals(p2);
}
public static bool operator != (Point p1, Point p2)
{
return !p1.Equals(p2);
}
//nạp chồng toán tử so sánh sử dụng hàm CompareTo
public static bool operator < (Point p1, Point p2)
{
return (p1.CompareTo(p2) < 0);
}
public static bool operator > (Point p1, Point p2)
{
return (p1.CompareTo(p2) > 0);
}
Bước 6: Viết hàm Main để kiểm tra các phương thức trên
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Point
{
class Program
{
static void Main(string[] args)
{
Point p1 = new Point(10, 10);
Point p2 = new Point(20, 20);
Point p3 = p1 + p2;
Console.WriteLine(p3);
Point p4 = p1 - 5;
Console.WriteLine(p4);
p1++;
Console.WriteLine(p1);
if (p1 != p2) Console.WriteLine("Not equal");
if (p1 < p2) Console.WriteLine("Less than");
Console.ReadKey();
}
}
}
Bước 7: Nhấn Ctrl+F5 để chạy và xem kết quả