DANH MỤC TÀI LIỆU
Nạp chồng toán tử trong C#
N p ch ng toán t trong C#ạ ồ ử
Operator Overloading là N p ch ng toán t . B n có th tái đ nh nghĩa ho cạ ồ ử ạ ể ị ặ
n p ch ng h u h t các toán t có s n trong C#. Vì th , m t l p trình viên ạ ồ ầ ế ử ẵ ế ộ ậ
có th s d ng các toán t v i các ki u t đ nh nghĩa (user-defined).ể ử ụ ử ớ ể ự ị
Các toán t đ c n p ch ng trongử ượ ạ ồ C# là các hàm v i các tên đ c bi t: bi u ớ ặ ệ ể
t ng cho toán t đang đ c đ nh nghĩa s có t khóa operator ngay phía ượ ử ượ ị ẽ ừ
sau. T ng t nh b t kỳ hàm nào khác, m t toán t đ c n p ch ng có ươ ự ư ấ ộ ử ượ ạ ồ
m t ki u tr v và m t danh sách tham s .ộ ể ả ề ộ ố
Ví d , b n xét hàm sau:ụ ạ
public static Hop operator+ (Hop b, Hop c)
{
Hop hopA = new Hop();
hopA.chieu_dai = b.chieu_dai + c.chieu_dai;
hopA.chieu_rong = b.chieu_rong + c.chieu_rong;
hopA.chieu_cao = b.chieu_cao + c.chieu_cao;
return hopA;
}
Hàm trên tri n khai toán t c ng (+) cho m t l p Hop t đ nh nghĩa (user-ể ử ộ ộ ớ ự ị
defined). Nó c ng các thu c tính c a hai đ i t ng Hop và tr v đ i ộ ộ ủ ố ượ ả ề ố
t ng k t qu Hop.ượ ế ả
Tri n khai N p ch ng toán t trong C#ể ạ ồ ử
Ví d d i đây minh h a cách tri n khai n p ch ng toán t trong C#: t o ụ ướ ọ ể ạ ồ ử ạ
hai l p có tên l n l t làớ ầ ượ Hop, ThuTinh nh sau:ư
using System; namespace VdNapChongToanTu {
// L p Hop ch a các thu c tính và ph ng th c. ớ ứ ộ ươ ứ class Hop { private double
chieu_dai; // Chi u dài c a h pề ủ ộ private double chieu_rong; // Chi u r ng ề ộ
c a h pủ ộ private double chieu_cao; // Chi u cao c a h pề ủ ộ public double
tinhTheTich() { return chieu_dai * chieu_rong * chieu_cao; } public void
ganChieuDai( double dai ) { chieu_dai = dai; } public void ganChieuRong(
double rong ) { chieu_rong = rong; } public void ganChieuCao( double cao )
{ chieu_cao = cao; } // N p ch ng toán t + đ c ng hai object Hopạ ồ ử ể ộ public
static Hop operator+ (Hop b, Hop c) { Hop hopA = new Hop();
hopA.chieu_dai = b.chieu_dai + c.chieu_dai; hopA.chieu_rong =
b.chieu_rong + c.chieu_rong; hopA.chieu_cao = b.chieu_cao + c.chieu_cao;
return hopA; } }
// L p ThuTinh ch a ph ng th c main() đ thao tác trên đ i t ng Hop. ớ ứ ươ ứ ể ố ượ
class ThuTinh { static void Main(string[] args) { Hop Hop1 = new Hop(); //
Khai báo Hop1 thu c lo i ộ ạ Hop Hop Hop2 = new Hop(); // Khai báo Hop2
thu c lo i ộ ạ Hop Hop Hop3 = new Hop(); // Khai báo Hop3 thu c lo i ộ ạ Hop
double TheTich = 0.0; // L u th tích Hop đâyư ể ở // Thông s c a Hop1ố ủ
Hop1.ganChieuDai(6.0); Hop1.ganChieuRong(7.0);
Hop1.ganChieuCao(5.0); // Thông s c a Hop2ố ủ Hop2.ganChieuDai(12.0);
Hop2.ganChieuRong(13.0); Hop2.ganChieuCao(10.0); // Th tích c a Hop1ể ủ
TheTich = Hop1.tinhTheTich(); Console.WriteLine("Th tích c a ể ủ Hop1:
{0}", TheTich); // Th tích c a Hop2ể ủ TheTich = Hop2.tinhTheTich();
Console.WriteLine("Th tích c a ể ủ Hop2: {0}", TheTich); // C ng 2 th tích ộ ể
nh bên d i:ư ướ Hop3 = Hop1 + Hop2; // Th tích c a Hop3ể ủ TheTich =
Hop3.tinhTheTich(); Console.WriteLine("Th tích c a Hop3: {0}"ể ủ ,
TheTich); Console.ReadKey(); } } }
Hãy dùng l nhệ Console.ReadKey(); đ nhìn k t qu m t cách rõ ràng h n.ể ế ả ộ ơ
Biên d ch và ch y ch ng trình C# trên s cho k t qu sau:ị ạ ươ ẽ ế ả
Thể tích của Hop1: 210
Thể tích của Hop2: 1560
Thể tích của Hop3: 5400
Toán t có th n p ch ng và không th n p ch ng trong C#ử ể ạ ồ ể ạ ồ
Bảng dưới miêu tả các toán tử có thể nạp chồng trong C#:
Toán tửMô tả
+, -, !, ~, ++, -- Nh ng toán t m t ngôi này nh n m t ữ ử ộ ậ ộ
toán h ng vàạ có thểđ c n p ch ng.ượ ạ ồ
+, -, *, /, % Nh ng toán t nh phân này nh n m t ữ ử ị ậ ộ
toán h ng vàạ có thểđ c n p ch ng.ượ ạ ồ
=, !=, <, >, <=, >= Các toán t so sánhử có thể đ c n p ượ ạ
ch ng.ồ
&&, || Các toán t logic đi u ki nử ề ệ không
thể đ c n p ch ng m t cách tr c ti p.ượ ạ ồ ộ ự ế
+=, -=, *=, /=, %= Các toán t gánử không thể đ c n p ượ ạ
ch ng.ồ
=, ., ?:, ->, new, is,
sizeof, typeof
Các toán t nàyử không thể đ c n p ượ ạ
ch ng.ồ
Ví dụ
T nh ng n i dung đã th o lu n bên trên, chúng ta k th a ví d trên và ừ ữ ộ ả ậ ế ừ ụ
n p ch ng thêm m t s toán t trong C#: trên chúng ta đã t o hai ạ ồ ộ ố ử ở ạ
l pớ Hop, ThuTinh, bây gi chúng ta s a l i code c a m i l p nh sau:ờ ử ạ ủ ỗ ớ ư
using System; namespace VdNapChongToanTu {
// L p Hop ch a các thu c tính và ph ng th c. ớ ứ ộ ươ ứ class Hop { private double
chieu_dai; // Chi u dài c a h pề ủ ộ private double chieu_rong; // Chi u r ng ề ộ
c a h pủ ộ private double chieu_cao; // Chi u cao c a h pề ủ ộ public double
tinhTheTich() { return chieu_dai * chieu_rong * chieu_cao; } public void
ganChieuDai( double dai ) { chieu_dai = dai; } public void ganChieuRong(
double rong ) { chieu_rong = rong; } public void ganChieuCao( double cao )
{ chieu_cao = cao; } // N p ch ng toán t + đ c ng hai object Hopạ ồ ử ể ộ public
static Hop operator+ (Hop b, Hop c) { Hop hopA = new Hop();
hopA.chieu_dai = b.chieu_dai + c.chieu_dai; hopA.chieu_rong =
b.chieu_rong + c.chieu_rong; hopA.chieu_cao = b.chieu_cao + c.chieu_cao;
return hopA; }
public static bool operator == (Hop lhs, Hop rhs) { bool status = false; if
(lhs.chieu_dai == rhs.chieu_dai && lhs.chieu_cao == rhs.chieu_cao &&
lhs.chieu_rong == rhs.chieu_rong) { status = true; } return status; } public
static bool operator !=(Hop lhs, Hop rhs) { bool status = false; if
(lhs.chieu_dai != rhs.chieu_dai || lhs.chieu_cao != rhs.chieu_cao ||
lhs.chieu_rong != rhs.chieu_rong) { status = true; } return status; } public
static bool operator <(Hop lhs, Hop rhs) { bool status = false; if
(lhs.chieu_dai < rhs.chieu_dai && lhs.chieu_cao < rhs.chieu_cao &&
lhs.chieu_rong < rhs.chieu_rong) { status = true; } return status; } public
static bool operator >(Hop lhs, Hop rhs) { bool status = false; if
(lhs.chieu_dai > rhs.chieu_dai && lhs.chieu_cao > rhs.chieu_cao &&
lhs.chieu_rong > rhs.chieu_rong) { status = true; } return status; } public
static bool operator <=(Hop lhs, Hop rhs) { bool status = false; if
(lhs.chieu_dai <= rhs.chieu_dai && lhs.chieu_cao <= rhs.chieu_cao &&
lhs.chieu_rong <= rhs.chieu_rong) { status = true; } return status; } public
static bool operator >=(Hop lhs, Hop rhs) { bool status = false; if
(lhs.chieu_dai >= rhs.chieu_dai && lhs.chieu_cao >= rhs.chieu_cao &&
lhs.chieu_rong >= rhs.chieu_rong) { status = true; } return status; } public
override string ToString() { return String.Format("({0}, {1}, {2})",
chieu_dai, chieu_rong, chieu_cao); } } // L p ThuTinh ch a ph ng th c ớ ứ ươ ứ
main() đ thao tác trên đ i t ng Hop. ể ố ượ class ThuTinh { static void
Main(string[] args) { Hop Hop1 = new Hop(); // Khai báo Hop1 thu c lo i ộ ạ
Hop Hop Hop2 = new Hop(); // Khai báo Hop2 thu c lo i ộ ạ Hop Hop Hop3 =
new Hop(); // Khai báo Hop3 thu c lo i ộ ạ Hop
Hop Hop4 = new Hop(); // Khai báo Hop4 thu c lo i ộ ạ Hop double TheTich =
0.0; // L u th tích Hop đâyư ể ở // Thông s c a Hop1ố ủ
Hop1.ganChieuDai(6.0); Hop1.ganChieuRong(7.0);
Hop1.ganChieuCao(5.0); // Thông s c a Hop2ố ủ Hop2.ganChieuDai(12.0);
Hop2.ganChieuRong(13.0); Hop2.ganChieuCao(10.0); // Hi n th các h p ể ị ộ
s d ng n p ch ng ToString():ử ụ ạ ồ Console.WriteLine("Hop1: {0}",
Hop1.ToString()); Console.WriteLine("Hop2: {0}", Hop2.ToString()); // Th ể
tích Hop1 TheTich = Hop1.tinhTheTich(); Console.WriteLine("Th tích ể
Hop1 : {0}", TheTich); // Th tích Hop2ể TheTich = Hop2.tinhTheTich();
Console.WriteLine("Th tích ểHop2 : {0}", TheTich); // C ng 2 đ i t ng ộ ố ượ
nh bên d i:ư ướ Hop3 = Hop1 + Hop2; Console.WriteLine("Hop3: {0}",
Hop3.ToString()); // Th tích Hop3ể TheTich = Hop3.tinhTheTich();
Console.WriteLine("Th tích Hop3 : {0}"ể, TheTich); //So sánh các h pộ if
(Hop1 > Hop2) Console.WriteLine("Hop1 l n h n ớ ơ Hop2"); else
Console.WriteLine("Hop1 không l n h n ớ ơ Hop2"); if (Hop1 < Hop2)
Console.WriteLine("Hop1 nh h n ỏ ơ Hop2"); else Console.WriteLine("Hop1
không nh h n ỏ ơ Hop2"); if (Hop1 >= Hop2) Console.WriteLine("Hop1 l n ớ
h n ho c b ng ơ ặ ằ Hop2"); else Console.WriteLine("Hop1 không l n h n ho c ớ ơ ặ
b ng ằHop2"); if (Hop1 <= Hop2) Console.WriteLine("Hop1 nh h n ho c ỏ ơ ặ
b ng ằHop2"); else Console.WriteLine("Hop1 không nh h n ho c b ng ỏ ơ ặ ằ
Hop2"); if (Hop1 != Hop2) Console.WriteLine("Hop1 không b ng ằHop2");
else Console.WriteLine("Hop1 không l n h n ho c b ng ớ ơ ặ ằ Hop2"); Hop4 =
Hop3; if (Hop3 == Hop4) Console.WriteLine("Hop3 b ng ằHop4"); else
Console.WriteLine("Hop3 không b ng ằHop4"); Console.ReadKey(); } } }
Biên d ch và ch y ch ng trình C# trên s cho k t qu sau:ị ạ ươ ẽ ế ả
Hop1: (6, 7, 5)
Hop2: (12, 13, 10)
Th tích ểHop1 : 210
Th tích ểHop2 : 1560
Hop3: (18, 20, 15)
Th tích ểHop3 : 5400
Hop1 không l n h n ớ ơ Hop2
Hop1 nh h n ỏ ơ Hop2
Hop1 không l n h n ho c b ng ớ ơ ặ ằ Hop2
Hop1 nh h n ho c b ng ỏ ơ ặ ằ Hop2
Hop1 không b ng ằHop2
Hop3 b ng ằHop4
thông tin tài liệu
Các toán tử được nạp chồng trong C# là các hàm với các tên đặc biệt: biểu tượng cho toán tử đang được định nghĩa sẽ có từ khóa operator ngay phía sau. Tương tự như bất kỳ hàm nào khác, một toán tử được nạp chồng có một kiểu trả về và một danh sách tham số.
Mở rộng để xem thêm
từ khóa liên quan
xem nhiều trong tuần
yêu cầu tài liệu
Giúp bạn tìm tài liệu chưa có

LÝ THUYẾT TOÁN


×