Kiểu dữ liệu trừu tượng
•Kiểu dữliệu trừu tượng (ADT) giúp đóng gói
(encapsulation) dữliệu.
–Dữliệu được bảo vệ, không cho phép mã người dùng
truy xuất trực tiếp.
•Kiểu dữliệu trừu tượng gồm 3 thành phần:
–Dữliệu.
–Giao diện.
–Mã thực thi.
•Mã người dùng chỉ được thao tác với dữliệu thông qua
các hàm thành viên (hình thành nên giao diện).
•Sựthay đổi biểu diễn dữliệu hay mã thực thi không
ảnh hưởng đến giao diện.
→Mã người dùng không thay đổi.
1Kiểu dữ liệ̣u trừu tượng (Abstract Data Type) 2 • Kiểu dữ liệu trừu tượng (ADT) giúp đóng gói (encapsulation) dữ liệu. – Dữ liệu được bảo vệ, không cho phép mã người dùng truy xuất trực tiếp. • Kiểu dữ liệu trừu tượng gồm 3 thành phần: – Dữ liệu. – Giao diện. – Mã thực thi. • Mã người dùng chỉ được thao tác với dữ liệu thông qua các hàm thành viên (hình thành nên giao diện). • Sự thay đổi biểu diễn dữ liệu hay mã thực thi không ảnh hưởng đến giao diện. → Mã người dùng không thay đổi. 3Encapsulation class Point { public: int x, y; Point(int x1 = 0, int y1 = 0) { x = x1; y = y1; } }; int main() { Point p(20, 20); Point q; p.x++; // go right p.x--; // go left p.y++; // go up p.y--; // go down cout << "p: " << p.x << ' ' << p.y << endl; q.x = 30; q.y = 30; // move q cout << "q: " << q.x << ' ' << q.y << endl; return 0; } 4 class Point { private: int x, y; public: void up() { y++; } void down() { y--; } void right() { x++; } void left() { x--; } int getx() const { return x; } int gety() const { return y; } void move(int x1, int y1) { x = x1; y = y1; } Point(int x1 = 0, int y1 = 0) { move(x1, y1); } }; 5int main() { Point p(20, 20); Point q; p.right(); p.left(); p.up(); p.down(); cout << "p: " << p.getx() << ' ' << p.gety(); q.move(30, 30); cout << "q: " << q.getx() << ' ' << q.gety(); return 0; } 6 class String { private: char *s; int len; void copy(const String &); void free(); public: … String(const char * = ""); String(const String &a) { copy(a); } ~String() { free(); } 7String & operator=(const String &a) { if (this != &a) { free(); copy(a); } return *this; } String & operator+=(const String &); char & operator[](int); const char & operator[](int) const; int length() const { return len; } }; 8 String::String(const char *p) { len = strlen(p); s = new char [len + 1]; strcpy(s, p); } void String::copy(const String & a) { len = strlen(a.s); s = new char [len + 1]; strcpy(s, a.s); } void String::free() { delete [] s; } 9char & String::operator[](int idx) { return s[(idx = len) ? len - 1 : idx)]; } const char & String::operator[](int idx) const{ return s[(idx = len) ? len - 1 : idx)]; } String & String::operator+=(const String & s1){ int newlen = len + s1.len + 1; char *st = new char [newlen]; strcpy(st, s); strcpy(st + len, s1.s); len = newlen; free(); s = st; return *this; } 10 friend ostream & operator<<(ostream &, const String &); friend istream & operator>>(istream &, String &); … ostream & operator<<(ostream &os, const String &a) { os << a.s << endl; return os; } istream & operator>>(istream &is, String &a) { char st[256]; is.getline(st, 256); a = st; return is; } 11 friend bool operator==(const String &, const String &); friend bool operator!=(const String &, const String &); friend bool operator>(const String &, const String &); friend bool operator>=(const String &, const String &); friend bool operator<(const String &, const String &); friend bool operator<=(const String &, const String &); 12 // Nonmember function String operator+(const String & s1, const String & s2) { return String(s1) += s2; } bool operator==(const String & s1, const String & s2) { return strcmp(s1.s, s2.s) == 0; } /* bool operator==(const char * s1, const String & s2) { return s2 == s1; } */ 13 bool operator!=(const String & s1, const String & s2) { return !(s1 == s2); } bool operator>(const String & s1, const String & s2) { return strcmp(s1.s, s2.s) > 0; } bool operator>=(const String & s1, const String & s2) { return !(s1 < s2); } bool operator<(const String & s1, const String & s2) { return strcmp(s1.s, s2.s) < 0; } bool operator<=(const String & s1, const String & s2) { return !(s1 > s2); }
File đính kèm:
- KieuDLTruuTuong.pdf