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 ca Hop1: 210
Th tích ca Hop2: 1560
Th tích ca 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 tMô 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


×