Bài giảng Lập trình hướng đối tượng: Một số kỹ thuật khác
lượt xem 2
download
Bài giảng "Lập trình hướng đối tượng: Một số kỹ thuật khác" cung cấp cho người học các kiến thức: Chỉ mục, nạp chồng toán tử, chuyển đổi kiểu. Đây là một tài liệu hữu ích dành cho các bạn sinh viên ngành Công nghệ thông tin và những ai quan tâm dùng làm tài liệu học tập và nghiên cứu.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lập trình hướng đối tượng: Một số kỹ thuật khác
- Một số kỹ thuật khác v 2.2 - 11/2017 Lê Viết Mẫn - lvman@hce.edu.vn 1 Một số kỹ thuật khác
- Nội dung 1. Chỉ mục 2. Nạp chồng toán tử 3. Chuyển đổi kiểu Lê Viết Mẫn - lvman@hce.edu.vn 2 Một số kỹ thuật khác
- Chỉ mục Lê Viết Mẫn - lvman@hce.edu.vn 3 Một số kỹ thuật khác
- Chỉ mục • Sử dụng thuộc tính chỉ mục public class PeopleCollection { List arrPeople = new List(); ... public Person this[int index] { get { return arrPeople[index]; } set { arrPeople.Insert(index, value); } } } static void Main() { PeopleCollection myPeople = new PeopleCollection(); //thêm các đối tượng với cú pháp chỉ mục myPeople[0] = new Person(“An”, 40); myPeople[1] = new Person(“Binh”, 35); //lấy đối tượng sử dụng chỉ mục for (int i = 0; i < myPeople.Count; i++) Console.WriteLine(myPeople[i]); } Lê Viết Mẫn - lvman@hce.edu.vn 4 Một số kỹ thuật khác
- Chỉ mục với giá trị chuỗi public class PeopleCollection { private Dictionary dicPeople = new Dictionary(); ... public Person this[string name] { get { return (Person)dicPeople[name]; } set { dicPeople[name] = value; } } } Lê Viết Mẫn - lvman@hce.edu.vn 5 Một số kỹ thuật khác
- Nạp chồng chỉ mục public class PeopleCollection { private Dictionary dicPeople = new Dictionary(); ... public Person this[string name] { get { return (Person)dicPeople[name]; } set { dicPeople[name] = value; } } public Person this[int index] { get { return (dicPeople.Values.ToList())[index]; } } } Lê Viết Mẫn - lvman@hce.edu.vn 6 Một số kỹ thuật khác
- Những vấn đề khác • Chỉ mục cho đa chiều public class SomeContainer { private int[,] my2DArray = new int[10, 10]; ... public int this[int row, int column] { ... } } • Định nghĩa chỉ mục trong giao diện public interface IStringContainer { string this[int index] { get; set; } } Lê Viết Mẫn - lvman@hce.edu.vn 7 Một số kỹ thuật khác
- Nạp chồng toán tử Lê Viết Mẫn - lvman@hce.edu.vn 8 Một số kỹ thuật khác
- Nạp chồng toán tử • Là khả năng thực thi các toán tử với các lớp tự định nghĩa giống với các kiểu dữ liệu cơ sở Point p1 = new Point(10, 20); Point p1 = new Point(10, 20); Point p2 = new Point(10, 40); Point p2 = new Point(10, 40); Point p3; Point p3; p3 = p2.add(p1); p3 = p2 + p1; p3 = p2 + 10; • Là một dạng của nạp chồng hàm • Là các hàm tĩnh có dạng operator@ (trong đó, @ là một toán tử có thể nạp chồng) • Lưu ý khi nạp chồng toán tử • Không thay đổi ý nghĩa của bất kỳ toán tử nào • Không thay đổi vị trí hay tính kết hợp của toán tử • Không thay đổi số lượng đối số • Không tạo ra toán tử mới (ví dụ, **) Lê Viết Mẫn - lvman@hce.edu.vn 9 Một số kỹ thuật khác
- Các toán tử có thể nạp chồng + - ! ~ ++ -- true Toán tử một ngôi false + - * / % & | ^ > == != < > = Toán tử so sánh [] Chỉ mục Không cần nạp chồng vì đã có kỹ thuật chỉ mục () Chuyển đổi kiểu Phần sau sẽ nói += -= *= /= %= &= |= Phép gán kết hợp ^= = Không cần nạp chồng Lê Viết Mẫn - lvman@hce.edu.vn 10 Một số kỹ thuật khác
- Lớp Point public class Point { public int X { get; set; } public int Y { get; set; } public Point (int xPos, int yPos) { X = xPos; Y = yPos; } public override string ToString() { return string.Format(“[{0}, {1}]”, this.X, this.Y); } } Lê Viết Mẫn - lvman@hce.edu.vn 11 Một số kỹ thuật khác
- Nạp chồng toán tử hai ngôi public class Point { ... 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, 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 - (int change, Point p1) { return new Point(p1.X - change, p1.Y - change); } } Lê Viết Mẫn - lvman@hce.edu.vn 12 Một số kỹ thuật khác
- Nạp chồng toán tử một ngôi public class Point { ... 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); } } Với toán tử tăng/giảm, chỉ cần định nghĩa một hàm cho cả tiền tố và hậu tố Lê Viết Mẫn - lvman@hce.edu.vn 13 Một số kỹ thuật khác
- Nạp chồng toán tử bằng public class Point { ... //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(); } //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); Khi nạp chồng toán tử bằng, phải nạp } chồng cả toán tử khác } Lê Viết Mẫn - lvman@hce.edu.vn 14 Một số kỹ thuật khác
- Nạp chồng toán tử so sánh public class Point : IComparable { ... //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(); } //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); } Khi nạp chồng toán tử lớn hơn, phải nạp chồng cả toán public static bool operator > (Point p1, Point p2) { tử nhỏ hơn return (p1.CompareTo(p2) > 0); Tương tự cho lớn hơn hoặc } bằng và nhỏ hơn hoặc bằng } Lê Viết Mẫn - lvman@hce.edu.vn 15 Một số kỹ thuật khác
- Chuyển đổi kiểu Lê Viết Mẫn - lvman@hce.edu.vn 16 Một số kỹ thuật khác
- Nhắc lại - Chuyển đổi kiểu • Chuyển đổi kiểu số học int a = 123; long b = a; // ngầm định int c = (int)b; // tường minh • Chuyển đổi kiểu giữa kiểu cơ sở và kiểu phái sinh class Base {} class Derived : Base {} class Program { static void Main() { Base myBase; myBase = new Derived(); // ngầm định Derived myDerived = (Derived)myBase; // tường minh } } • Cấu tử chuyển đổi kiểu class Rectangle {...} class Square { ... public Square (Rectangle r) { this.Size = r.Width; } } Lê Viết Mẫn - lvman@hce.edu.vn 17 Một số kỹ thuật khác
- Lớp Rectangle public class Rectangle { public int Width { get; set; } public int Height { get; set; } public Rectangle(int w, int h) { Width = w; Height = h; } public Rectangle() {} public void Draw () { Console.WriteLine(“Rectangle”); } public override string ToString () { return string.Format(“[Width={0}; Height={1}]”, Width, Height); } } Lê Viết Mẫn - lvman@hce.edu.vn 18 Một số kỹ thuật khác
- Lớp Square public class Square { public int Size { get; set; } public Square(int s) { Size = s; } public Square () {} public void Draw () { Console.WriteLine(“Square”); } public override string ToString () { return string.Format(“[Size={0}]”, Size); } } Lê Viết Mẫn - lvman@hce.edu.vn 19 Một số kỹ thuật khác
- Từ khoá explicit public class Square { ... public static explicit operator Square (Rectangle r) { Square s = new Square(); s.Size = r.Height; return s; } } static void DrawSquare(Square sq) { Console.WriteLine(sq); sq.Draw(); } static void Main() { Rectangle rect = new Rectangle (10,20); DrawSquare((Square)rect); } Lê Viết Mẫn - lvman@hce.edu.vn 20 Một số kỹ thuật khác
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - TS. Trần Công Án
57 p | 89 | 13
-
Bài giảng Lập trình hướng đối tượng: Chương 2 - Nguyễn Sơn Hoàng Quốc, ThS. Nguyễn Tấn Trần Minh Khang
14 p | 174 | 12
-
Bài giảng Lập trình hướng đối tượng - Chương 1: Phương pháp lập trình hướng đối tượng
9 p | 140 | 9
-
Bài giảng Lập trình hướng đối tượng C++ - Chương 2: Lập trình hướng đối tượng
53 p | 46 | 8
-
Bài giảng Lập trình hướng đối tượng (dùng Java): Chương 1 - Trần Minh Thái (2017)
55 p | 80 | 8
-
Bài giảng Lập trình hướng đối tượng - Bài 1: Tổng quan lập trình hướng đối tượng
53 p | 119 | 8
-
Bài giảng Lập trình hướng đối tượng (Dùng C#): Chương 2 - Trần Minh Thái
35 p | 103 | 8
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Thị Anh Thi
7 p | 197 | 7
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - ThS. Trịnh Thành Trung
53 p | 86 | 7
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Minh Thái
40 p | 116 | 6
-
Bài giảng Lập trình hướng đối tượng 1: Chương 1 - ThS. Thái Kim Phụng
39 p | 100 | 6
-
Bài giảng Lập trình hướng đối tượng – Bài 01: Tổng quan về OOP
47 p | 63 | 5
-
Bài giảng Lập trình hướng đối tượng (dùng JAVA): Chương 1 - Trần Minh Thái
40 p | 99 | 5
-
Bài giảng Lập trình hướng đối tượng và C++: Chương 1
15 p | 103 | 4
-
Bài giảng Lập trình hướng đối tượng: Nhập môn - Trần Phước Tuấn
15 p | 139 | 4
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Tổng quan về lập trình hướng đối tượng
47 p | 11 | 4
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Các khái niệm cơ bản trong lập trình hướng đối tượng
36 p | 15 | 3
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Nguyễn Khanh Văn
0 p | 83 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn