Bài giảng môn học Lập trình hướng đối tượng - Chương 4: Sự kế thừa
lượt xem 3
download
Sự kế thừa là một đặc điểm của ngôn ngữ dùng để biểu diễn mối quan hệ đặc biệt giữa các lớp. Chương này sẽ trang bị cho người học một số kiến thức về sự kế thừa như: Kế thừa đơn, phạm vi truy xuất, phương thức thiết lập và huỷ bỏ, con trỏ và kế thừa. Mời các bạn cùng tham khảo để nắm bắt các nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng môn học Lập trình hướng đối tượng - Chương 4: Sự kế thừa
- Chöông 4 Söï keá thöøa 1
- Noäi dung 1. Môû ñaàu 2. Keá thöøa ñôn 3. Phaïm vi truy xuaát 4. Phöông thöùc thieát laäp vaø huyû boû 5. Con troû vaø keá thöøa 2
- 4.1 Môû ñaàu - Söï keá thöøa laø moät ñaëc ñieåm cuûa ngoân ngöõ duøng ñeå bieåu dieãn moái quan heä ñaëc bieät giöõa caùc lôùp. Caùc lôùp ñöôïc tröøu töôïng hoùa vaø toå chöùc thaønh moät sô ñoà phaân caáp lôùp. - Keá thöøa laø moät cô cheá tröøu töôïng hoùa. Thuû tuïc vaø haøm laø cô cheá tröøu töôïng hoùa cho giaûi thuaät, record vaø struct laø tröøu töôïng hoùa cho döõ lieäu. Khaùi nieäm lôùp trong C++, keát hôïp döõ lieäu vaø thuû tuïc ñeå ñöôïc kieåu döõ lieäu tröøu töôïng vôùi giao dieän ñoäc laäp vôùi caøi ñaët vaø cho ngöôøi söû duïng caûm giaùc thoaûi maùi nhö kieåu döõ lieäu coù saün - Söï keá thöøa laø moät möùc cao hôn cuûa tröøu töôïng hoùa. cung caáp moät cô cheá gom chung caùc lôùp coù lieân quan vôùi nhau thaønh moät möùc khaùi quaùt hoùa ñaëc tröng cho toaøn boä caùc lôùp noùi treân. Caùc lôùp vôùi caùc ñaëc ñieåm töông töï nhau coù theå ñöôïc toå chöùc thaønh moät sô ñoà phaân caáp keá thöøa. Lôùp ôû treân cuøng laø tröøu töôïng hoùa cuû3a toaøn boä caùc lôùp oû beân döôùi noù.
- Môû ñaàu Quan heä laø 1: Keá thöøa ñöôïc söû duïng thoâng duïng nhaát ñeå bieåu dieãn quan heä laø moät. • Moät sinh vieân laø moät ngöôøi • Moät hình troøn laø moät hình ellipse • Moät tam giaùc laø moät ña giaùc Keá thöøa taïo khaû naêng xaây döïng lôùp môùi töø lôùp ñaõ coù, trong ñoù haøm thaønh phaàn ñöôïc thöøa höôûng töø lôùp cha. Trong C++, keá thöøa coøn ñònh nghóa söï töông thích, nhôø ñoù ta coù cô cheá chuyeån kieåu töï ñoäng. Keá thöøa vöøa coù khaû naêng taïo cô cheá khaùi quaùt hoaù vöøa coù khaû naêng chuyeân bieät hoaù. Keá thöøa cho pheùp toå chöùc caùc lôùp chia seû maõ chöông trình chung nhôø vaäy coù theå deã daøng söûa chöõa, naâng caáp heä thoáng. 4
- Môû ñaàu Keá thöøa thöôøng ñöôïc duøng theo hai caùch: • Ñeå phaûn aùnh moái quan heä giöõa caùc lôùp. Laø coâng cuï ñeå toå chöùc vaø phaân caáp lôùp döïa vaøo söï chuyeân bieät hoùa, trong ñoù moät vaøi haøm thaønh phaàn cuûa lôùp con laø phieân baûn hoaøn thieän hoaëc ñaëc bieät hoaù cuûa phieân baûn ôû lôùp cha. Trong C++ moái quan heä naøy thöôøng ñöôïc caøi ñaët söû duïng: Keá thöøa public. Haøm thaønh phaàn laø phöông thöùc aûo • Ñeå phaûn aùnh söï chia seû maõ chöông trình giöõa caùc lôùp khoâng coù quan heä veà maët ngöõ nghóa nhöng coù theå coù toå chöùc döõ lieäu vaø maõ chöông trình töông töï nhau. Trong C++, cô cheá chia seû maõ naøy thöôøng ñöôïc caøi ñaët duøng: Keá thöøa private. Haøm thaønh phaàn khoâng laø phöông 5 thöùc aûo.
- 4.2 Keá thöøa ñôn Keá thöøa coù theå ñöôïc thöïc hieän ñeå theå hieän moái quan heä 'laø moät'. Xeùt hai khaùi nieäm ngöôøi vaø sinh vieân vôùi moái quan heä töï nhieân: moät 'sinh vieân' laø moät 'ngöôøi'. Trong C++, ta coù theå bieåu dieãn khaùi nieäm treân, moät sinh vieân laø moät ngöôøi coù theâm moät soá thoâng tin vaø moät soá thao taùc (rieâng bieät cuûa sinh vieân). Ta toå chöùc lôùp sinh vieân keá thöøa töø lôùp ngöôøi. Lôùp ngöôøi ñöôïc goïi laø lôùp cha (superclass) hay lôùp cô sôû (base class). Lôùp sinh vieân ñöôïc goïi laø lôùp con (subclass) hay lôùp daãn xuaát (derived class). 6
- Keá thöøa ñôn class Nguoi { friend class SinhVien; char *HoTen; int NamSinh; public: Nguoi(char *ht, int ns):NamSinh(ns) {HoTen = strdup(ht);} ~Nguoi() {delete [] HoTen;} void An() const { cout
- Keá thöøa ñôn class SinhVien : public Nguoi { char *MaSo; public: SinhVien(char *ht, char *ms, int ns) : Nguoi(ht,ns) { MaSo = strdup(ms);} ~SinhVien() {delete [] MaSo;} void Xuat() const; }; ostream& operator
- Keá thöøa ñôn void Nguoi::Xuat() const { cout
- Keá thöøa ñôn void main() { Nguoi p1("Le Van Nhan",1980); SinhVien s1("Vo Vien Sinh", "200002541",1984); cout
- Töï ñoäng keá thöøa caùc ñaëc tính cuûa lôùp cha Khai baùo class SinhVien : public Nguoi { //... }; Cho bieát lôùp sinh vieân keá thöøa töø lôùp ngöôøi. Khi ñoù sinh vieân ñöôïc thöøa höôûng caùc ñaëc tính cuûa lôùp ngöôøi. Veà maët döõ lieäu: Moãi ñoái töôïng sinh vieân töï ñoäng coù thaønh phaàn döõ lieäu hoï teân vaø naêm sinh cuûa ngöôøi. Veà maët thao taùc: Lôùp sinh vieân ñöôïc töï ñoäng keá thöøa caùc thao taùc cuûa lôùp cha. Ñaây chính laø khaû naêng söû duïng laïi maõ chöông trình. Rieâng phöông thöùc thieát laäp khoâng ñöôïc keá thöøa. 11
- Töï ñoäng keá thöøa caùc ñaëc tính cuûa lôùp cha Nguoi p1("Le Van Nhan",1980); SinhVien s1("Vo Vien Sinh", "200002541",1984); p1.An(); cout
- Ñònh nghóa laïi thao taùc ôû lôùp con Ta coù theå ñònh nghóa laïi caùc ñaëc tính ôû lôùp con ñaõ coù ôû lôùp cha, vieäc ñònh nghóa chuû yeáu laø thao taùc, baèng caùch khai baùo gioáng heät nhö ôû lôùp cha. class SinhVien : public Nguoi { char *MaSo; public: //... void Xuat() const; }; void SinhVien::Xuat() const { cout
- Ñònh nghóa laïi thao taùc ôû lôùp con Vieäc ñònh nghóa laïi thao taùc ôû lôùp con ñöôïc thöïc hieän khi thao taùc ôû lôùp con khaùc thao taùc ôû lôùp cha. Thoâng thöôøng laø caùc thao taùc xuaát, nhaäp. Ta cuõng coù theå ñònh nghóa laïi thao taùc ôû lôùp con trong tröôøng hôïp giaûi thuaät ôû lôùp con ñôn giaûn hôn (toâ maøu ña giaùc, tính modun cuûa soá aûo...). class DaGiac { // ... void Ve() const; void ToMau() const; }; class HCN { void ToMau() const; }; 14
- Ñònh nghóa laïi thao taùc ôû lôùp con Hoaëc ôû lôùp con, thao taùc khoâng coù taùc duïng class Ellipse { //... public: //... void rotate(double rotangle){ //...} }; class Circle:public Ellipse { public: //... void rotate(double rotangle){/* do nothing */} }; 15
- 4.3 Raøng buoäc ngöõ nghóa ôû lôùp con Keá thöøa coù theå ñöôïc aùp duïng cho quan heä keá thöøa mang yù nghóa raøng buoäc, ñoái töôïng ôû lôùp con laø ñoái töôïng ôû lôùp cha nhöng coù döõ lieäu bò raøng buoäc. • Hình troøn laø Ellipse raøng buoäc baùn kính ngang doïc baèng nhau. • Soá aûo laø soá phöùc raøng buoäc phaàn thöïc baèng 0. • Hình vuoâng laø hình chöõ nhaät raøng buoäc hai caïnh ngang vaø doïc baèng nhau… Trong tröôøng hôïp naøy, caùc haøm thaønh phaàn phaûi baûo ñaûm söï raøng buoäc döõ lieäu ñöôïc toân troïng. Lôùp soá aûo sau ñaây laø moät ví duï minh hoaï. 16
- Raøng buoäc ngöõ nghóa ôû lôùp con class Complex { friend ostream& operator
- Raøng buoäc ngöõ nghóa ôû lôùp con class Imag: public Complex { public: Imag(double i = 0):Complex(0, i){} Imag(const Complex &c) : Complex(0, c.im){} Imag& operator = (const Complex &c) {re = 0; im = c.im; return *this;} double Norm() const {return fabs(im);} }; void main() { Imag i = 1; Complex z1(1,1), z3 = z1 - i; // z3 = (1,0) i = Complex(5,2); // i la so ao (0,2) Imag j = z1; // j la so ao (0,1) cout
- Raøng buoäc ngöõ nghóa ôû lôùp con Trong ví duï treân lôùp soá aûo (Imag) keá thöøa haàu heát caùc thao taùc cuûa lôùp soá phöùc (Complex). Tuy nhieân ta muoán raøng buoäc moïi ñoái töôïng thuoäc lôùp soá aûo ñeàu phaûi coù phaàn thöïc baèng 0. Vì vaäy phaûi ñònh nghóa laïi caùc haøm thaønh phaàn coù theå vi phaïm ñieàu naøy. Ví duï pheùp toaùn gaùn phaûi ñöôïc ñònh nghóa laïi ñeå baûo ñaûm raøng buoäc naøy. class Imag: public Complex { public: //... Imag(const Complex &c) : Complex(0, c.im){} Imag& operator = (const Complex &c) {re = 0; im = c.im; return *this;} }; 19
- Raøng buoäc ngöõ nghóa ôû lôùp con Ví duï sau minh hoaï theâm raøng buoäc ngöõ nghóa ôû lôùp con class HCN:public Hinh { Diem TrenTrai; double rong, cao; public: HCN(Diem tt, double r, double c); HCN(double ttx, double tty, double r, double c); HCN():TrenTrai(4,6), rong(7), cao(4){} virtual double DienTich() const {return rong*cao;} virtual void Nhap(); virtual void Xuat(); virtual void PhongTo(double tiLe); virtual void GianNgang(double tiLe); virtual void GianDoc(double tiLe); }; 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Ngôn ngữ lập trình C++: Chương 1 - Trần Minh Châu
17 p | 252 | 54
-
Bài giảng Kỹ thuật lập trình - Phạm Thế Bảo
0 p | 221 | 32
-
Bài giảng Kỹ thuật lập trình: Chương I - Lưu Hồng Việt
48 p | 196 | 23
-
Bài giảng môn học Lập trình hệ nhúng - Phạm Văn Thuận
113 p | 129 | 22
-
Bài giảng Cơ sở lập trình 1: Giới thiệu môn học - Lê Quý Tài
9 p | 135 | 8
-
Bài giảng Ngôn ngữ lập trình C: Giới thiệu môn học - PhD. Nguyễn Thị Huyền
7 p | 59 | 7
-
Bài giảng môn học Cơ sở lập trình - ThS. Phạm Thanh An
4 p | 117 | 7
-
Bài giảng Kỹ thuật lập trình: Bài 1 - Phạm Đình Sắc
9 p | 133 | 7
-
Bài giảng môn học Cơ sở lập trình
11 p | 98 | 6
-
Bài giảng Cơ sở lập trình: Giới thiệu môn học - Trịnh Tấn Đạt
15 p | 17 | 6
-
Bài giảng Ngôn ngữ lập trình: Tổng quan môn học - Lê Nguyễn Tuấn Thành
6 p | 141 | 6
-
Bài giảng Kỹ thuật lập trình - TS. Vũ Hương Giang
8 p | 120 | 5
-
Bài giảng Cơ sở lập trình - Giới thiệu môn học
9 p | 143 | 5
-
Bài giảng Kỹ thuật lập trình: Giới thiệu môn học - TS. Vũ Thị Hương Giang
8 p | 26 | 4
-
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 p | 16 | 4
-
Bài giảng Giới thiệu lập trình: Thông tin môn học - TS. Lê Nguyên Khôi
6 p | 74 | 2
-
Bài giảng Ngôn ngữ lập trình C: Giới thiệu môn học - TS. Nguyễn Thị Hiền
7 p | 55 | 2
-
Bài giảng Kỹ thuật lập trình: Mở đầu - TS. Vũ Hương Giang
8 p | 36 | 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