![Phân tích tư tưởng của nhân dân qua đoạn thơ: Những người vợ nhớ chồng… Những cuộc đời đã hóa sông núi ta trong Đất nước của Nguyễn Khoa Điềm](https://timtailieu.net/upload/document/136415/phan-tich-tu-tuong-cua-nhan-dan-qua-doan-tho-039-039-nhung-nguoi-vo-nho-chong-nhung-cuoc-doi-da-hoa-song-nui-ta-039-039-trong-dat-nuoc-cua-nguyen-khoa-136415.jpg)
Nạp chồng toán tử phần cuối
Số trang: 10
Loại file: pdf
Dung lượng: 186.71 KB
Lượt xem: 3
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Ví dụ 6.1: Định nghĩa các chuyển đổi và toán tử cho lớp Fraction.
Nội dung trích xuất từ tài liệu:
Nạp chồng toán tử phần cuối Ví dụ 6.1: Định nghĩa các chuyển đổi và toán tử cho lớp Fraction.-----------------------------------------------------------------------------using System;public class Fraction{ public Fraction(int numerator,int denominator) { Console.WriteLine(In Fraction Constructor( int, int) ); this.numerator = numerator; this.denominator = denominator; } public Fraction(int wholeNumber) { Console.WriLine(In Fraction Constructor( int )); numerator = wholeNumber; denominator = 1; } public static implicit operator Fraction( int theInt ) { Console.WriteLine( In implicit conversion to Fraction); return new Fraction( theInt ); } public static explicit operator int( Fraction theFraction ) { Console.WriteLine(In explicit conversion to int); return theFraction.numerator / theFraction.denominator; } public static bool operator == ( Fraction lhs, Fraction rhs) { Console.WriteLine(In operator ==); if ( lhs.numerator == rhs.numerator && lhs.denominator == rhs.denominator ) { return true; } // thực hiện khi hai phân số không bằng nhau return false;}public static bool operator != ( Fraction lhs, Fraction rhs){ Console.WriteLine(In operator !=); return !( lhs == rhs );}public override bool Equals( object o ){ Console.WriteLine(In method Equals); if ( !(o is Fraction )) { return false; } return this == ( Fraction ) o;}public static Fraction operator+( Fraction lhs, Fraction rhs ){ Console.WriteLine(In operator +); if (lhs.denominator == rhs.denominator ) { return new Fraction( lhs.numerator + rhs.numerator, lhs.denominator ); } //thực hiện khi hai mẫu số khộng bằng nhau int firstProduct = lhs.numerator * rhs.denominator; int secondProduct = rhs.numerator * lhs.denominator; return new Fraction( firstProduct + secondProduct, lhs.denominator * rhs.denominator);}public override string ToString(){ string s = numerator.ToString() + / + denominator.ToString(); return s; } //biến thành viên lưu tử số và mẫu số private int numerator; private int denominator;}public class Tester{ static void Main() { Fraction f1 = new Fraction( 3, 4); Console.WriteLine(f1:{0},f1.ToString() ); Fraction f2 = new Fraction( 2, 4); Console.WriteLine(f2:{0},f2.ToString() ); Fraction f3 = f1 + f2; Console.WriteLine(f1 + f2 = f3:{0},f3.ToString()); Fraction f4 = f3 + 5; Console.WriteLine(f4 = f3 + 5:{0},f4.ToString()); Fraction f5 = new Fraction( 2, 4); if( f5 == f2 ) { Console.WriteLine(f5:{0}==f2:{1} , f5.ToString(), f2.ToString()); } }}-----------------------------------------------------------------------------Lớp Fraction bắt đầu với hai hàm khởi dựng: một hàm lấy một tử số và mẫu số, cònhàm kialấy chỉ lấy một số làm tử số. Tiếp sau hai bộ khởi dựng là hai toán tử chuyển đổi.Toán tử chuyển đổi đầu tiên chuyển một số nguyên sang một phân số:public static implicit operator Fraction( int theInt ){ return new Fraction( theInt); }Sự chuyển đổi này được thực hiện một cách ngầm định bởi vì bất cứ số nguyên nàocũng có thể được chuyển thành một phân số bằng cách thiết lập tử số bằng giá trị sốnguyên và mẫu số có giá trị là 1. Việc thực hiện này có thể giao lại cho phương thức khởidựng lấy một tham số. Toán tử chuyển đổi thứ hai được thực hiện một cách tường minh,chuyển từ một Fraction ra một số nguyên: public static explicit operator int( Fraction theFraction ) { return theFraction.numerator / theFraction.denominator; }Bởi vì trong ví dụ này sử dụng phép chia nguyên, phép chia này sẽ cắt bỏ phần phân chỉlấy phần nguyên. Do vậy nếu phân số có giá trị là 16/15 thì kết quả số nguyên trả về là 1.Một số các phép chuyển đổi tốt hơn bằng cách sử dụng làm tròn số.Tiếp theo sau là toán tử so sánh bằng (==) và toán tử so sánh không bằng (!=). Chúngta nên nhớ rằng khi thực thi toán tử so sánh bằng thì cũng phải thực thi toán tử so sánhkhông bằng. Chúng ta đã định nghĩa giá trị bằng nhau giữa hai Fraction khi tử sốbằng tử số và mẫu số bằng mẫu số. Vi dụ, như hai phân số 3/4 và 6/8 thì khôngđược so sánh là bằng nhau. Một lần nữa, một sự thực thi tốt hơn là tối giản tử số vàmẫu số khi đó 6/8 sẽ đơn giản thành 3/4 và khi đó so sánh hai phân số sẽ bằngnhau.Trong lớp này chúng ta cũng thực thi phủ quyết phương thức Equals() của lớp object,do đóđối tượng Fraction của chúng ta có thể được đối xử một cách đa hình với bất cứ đốitượng khác. Trong phần thực thi của phương thức chúng ta ủy thác việc so sánh lạicho toán tử so sánh bằng cách gọi toán tử (==).Lớp Fraction có thể thực thi hết tất cả các toán tử số học như cộng, trừ, nhân, chia.Tuy nhiên, trong phạm vi nhỏ hẹp của minh họa chúng ta chỉ thực thi toán tử cộng,và thậm chí phép cộng ở đây được thực hiện đơn giản nhất. Chúng ta thử nhìn lại, nếuhai mẫu số bằng nhau thìta cộng tử số: public static Fraction operator + ( Fraction lhs, Fraction rhs) { if ( lhs.denominator == rhs.denominator) { return new Fraction( lhs.numerator + rhs.numerator, lhs.denominator); } }Nếu mẫu số không cùng nhau, thì chúng ta thực hiện nhân chéo: int firstProduct = lhs.numerator * rhs.denominator; int secondProduct = rhs.numerator * lhs.denominator; return new Fraction( firstProduct + secondProduct, lhs.denominator * rhs.denominator);Cuối cùng là sự phủ quyết phương thức ToString() của lớp object, phương thức mới nàythực hiện viết xuất ra nội dung của phân s ...
Nội dung trích xuất từ tài liệu:
Nạp chồng toán tử phần cuối Ví dụ 6.1: Định nghĩa các chuyển đổi và toán tử cho lớp Fraction.-----------------------------------------------------------------------------using System;public class Fraction{ public Fraction(int numerator,int denominator) { Console.WriteLine(In Fraction Constructor( int, int) ); this.numerator = numerator; this.denominator = denominator; } public Fraction(int wholeNumber) { Console.WriLine(In Fraction Constructor( int )); numerator = wholeNumber; denominator = 1; } public static implicit operator Fraction( int theInt ) { Console.WriteLine( In implicit conversion to Fraction); return new Fraction( theInt ); } public static explicit operator int( Fraction theFraction ) { Console.WriteLine(In explicit conversion to int); return theFraction.numerator / theFraction.denominator; } public static bool operator == ( Fraction lhs, Fraction rhs) { Console.WriteLine(In operator ==); if ( lhs.numerator == rhs.numerator && lhs.denominator == rhs.denominator ) { return true; } // thực hiện khi hai phân số không bằng nhau return false;}public static bool operator != ( Fraction lhs, Fraction rhs){ Console.WriteLine(In operator !=); return !( lhs == rhs );}public override bool Equals( object o ){ Console.WriteLine(In method Equals); if ( !(o is Fraction )) { return false; } return this == ( Fraction ) o;}public static Fraction operator+( Fraction lhs, Fraction rhs ){ Console.WriteLine(In operator +); if (lhs.denominator == rhs.denominator ) { return new Fraction( lhs.numerator + rhs.numerator, lhs.denominator ); } //thực hiện khi hai mẫu số khộng bằng nhau int firstProduct = lhs.numerator * rhs.denominator; int secondProduct = rhs.numerator * lhs.denominator; return new Fraction( firstProduct + secondProduct, lhs.denominator * rhs.denominator);}public override string ToString(){ string s = numerator.ToString() + / + denominator.ToString(); return s; } //biến thành viên lưu tử số và mẫu số private int numerator; private int denominator;}public class Tester{ static void Main() { Fraction f1 = new Fraction( 3, 4); Console.WriteLine(f1:{0},f1.ToString() ); Fraction f2 = new Fraction( 2, 4); Console.WriteLine(f2:{0},f2.ToString() ); Fraction f3 = f1 + f2; Console.WriteLine(f1 + f2 = f3:{0},f3.ToString()); Fraction f4 = f3 + 5; Console.WriteLine(f4 = f3 + 5:{0},f4.ToString()); Fraction f5 = new Fraction( 2, 4); if( f5 == f2 ) { Console.WriteLine(f5:{0}==f2:{1} , f5.ToString(), f2.ToString()); } }}-----------------------------------------------------------------------------Lớp Fraction bắt đầu với hai hàm khởi dựng: một hàm lấy một tử số và mẫu số, cònhàm kialấy chỉ lấy một số làm tử số. Tiếp sau hai bộ khởi dựng là hai toán tử chuyển đổi.Toán tử chuyển đổi đầu tiên chuyển một số nguyên sang một phân số:public static implicit operator Fraction( int theInt ){ return new Fraction( theInt); }Sự chuyển đổi này được thực hiện một cách ngầm định bởi vì bất cứ số nguyên nàocũng có thể được chuyển thành một phân số bằng cách thiết lập tử số bằng giá trị sốnguyên và mẫu số có giá trị là 1. Việc thực hiện này có thể giao lại cho phương thức khởidựng lấy một tham số. Toán tử chuyển đổi thứ hai được thực hiện một cách tường minh,chuyển từ một Fraction ra một số nguyên: public static explicit operator int( Fraction theFraction ) { return theFraction.numerator / theFraction.denominator; }Bởi vì trong ví dụ này sử dụng phép chia nguyên, phép chia này sẽ cắt bỏ phần phân chỉlấy phần nguyên. Do vậy nếu phân số có giá trị là 16/15 thì kết quả số nguyên trả về là 1.Một số các phép chuyển đổi tốt hơn bằng cách sử dụng làm tròn số.Tiếp theo sau là toán tử so sánh bằng (==) và toán tử so sánh không bằng (!=). Chúngta nên nhớ rằng khi thực thi toán tử so sánh bằng thì cũng phải thực thi toán tử so sánhkhông bằng. Chúng ta đã định nghĩa giá trị bằng nhau giữa hai Fraction khi tử sốbằng tử số và mẫu số bằng mẫu số. Vi dụ, như hai phân số 3/4 và 6/8 thì khôngđược so sánh là bằng nhau. Một lần nữa, một sự thực thi tốt hơn là tối giản tử số vàmẫu số khi đó 6/8 sẽ đơn giản thành 3/4 và khi đó so sánh hai phân số sẽ bằngnhau.Trong lớp này chúng ta cũng thực thi phủ quyết phương thức Equals() của lớp object,do đóđối tượng Fraction của chúng ta có thể được đối xử một cách đa hình với bất cứ đốitượng khác. Trong phần thực thi của phương thức chúng ta ủy thác việc so sánh lạicho toán tử so sánh bằng cách gọi toán tử (==).Lớp Fraction có thể thực thi hết tất cả các toán tử số học như cộng, trừ, nhân, chia.Tuy nhiên, trong phạm vi nhỏ hẹp của minh họa chúng ta chỉ thực thi toán tử cộng,và thậm chí phép cộng ở đây được thực hiện đơn giản nhất. Chúng ta thử nhìn lại, nếuhai mẫu số bằng nhau thìta cộng tử số: public static Fraction operator + ( Fraction lhs, Fraction rhs) { if ( lhs.denominator == rhs.denominator) { return new Fraction( lhs.numerator + rhs.numerator, lhs.denominator); } }Nếu mẫu số không cùng nhau, thì chúng ta thực hiện nhân chéo: int firstProduct = lhs.numerator * rhs.denominator; int secondProduct = rhs.numerator * lhs.denominator; return new Fraction( firstProduct + secondProduct, lhs.denominator * rhs.denominator);Cuối cùng là sự phủ quyết phương thức ToString() của lớp object, phương thức mới nàythực hiện viết xuất ra nội dung của phân s ...
Tìm kiếm theo từ khóa liên quan:
Công nghệ thông tin kỹ thuật lập trình ngôn ngữ lập trình ngôn ngữ C# C# Nạp chồng toán tử phần cuốiTài liệu liên quan:
-
52 trang 438 1 0
-
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 326 0 0 -
74 trang 307 0 0
-
96 trang 304 0 0
-
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 295 0 0 -
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 291 1 0 -
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 290 0 0 -
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 282 0 0 -
EBay - Internet và câu chuyện thần kỳ: Phần 1
143 trang 278 0 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 277 0 0