Kỹ thuật lập trình hướng đối tư - Chapter 4
Số trang: 32
Loại file: pdf
Dung lượng: 54.85 KB
Lượt xem: 19
Lượt tải: 0
Xem trước 4 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Quá tải hàm• Quá tải hàm tạo • Hàm tạo bản sao • Hàm với các đối số mặc định • Tính không xác định khi quá tải hàm • Điạ chỉ của hàm quá tải
Nội dung trích xuất từ tài liệu:
Kỹ thuật lập trình hướng đối tư - Chapter 4Chöông 4 Quaù taûi haøm • Quaù taûi haøm taïo • Haøm taïo baûn sao • Haøm vôùi caùc ñoái soá maëc ñònh • Tính khoâng xaùc ñònh khi quaù taûi haøm • Ñiaï chæ cuûa haøm quaù taûiChöông 4 Quaù taûi haøm 104104Chöông 4 Quaù taûi haøm 105I/ Quaù taûi haøm taïo (constructor overloading )Coù theå quaù taûi haøm taïo cuûa moät lôùp, nhöng khoâng quaù taûi haøm huûy.Haøm taïo cuûa lôùp phaûi phuø hôïp vôùi caùch maø ñoái töôïng cuûa lôùp ñoù ñöôïc khai baùo. Neáukhoâng loãi thôøi gian bieân dòch seõ xaûy ra.Coù 3 lyù do caàn quaù taûi haøm taïo : + ñeå coù tính linh hoaït + ñeå hoå trôï maûng + ñeå taïo caùc haøm taïo baûn saoHaïn cheá : neáu thöïc hieän quaù taûi nhieàu laàn coù theå taïo ra taùc duïng huûy hoaïi treân lôùp. • Quaù taûi haøm taïo vôùi khôûi ñaàu moät ñoái töôïng hoaëc khoâng khôûi ñaàu ñoái töôïngVí duï 1.1#include class myclass { int x;public: // overload constructor two ways myclass() { x = 0; } // no initializer myclass(int n) { x = n; } // initializer int getx() { return x; }};int main(){ myclass o1(10); // declare with initial value myclass o2; // declare without initializer cout Chöông 4 Quaù taûi haøm 106 • Quaù taûi haøm taïo ñeå cho caùc ñoái töôïng rieâng leõ laãn caùc maûng ñoái töôïng xaûy ra trong chöông trình.Ví duï 1.2#include class myclass { int x;public: // overload constructor two ways myclass() { x = 0; } // no initializer myclass(int n) { x = n; } // initializer int getx() { return x; }};int main(){ myclass o1[10]; // declare array without initializers myclass o2[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // declare with initializers int i; for(i=0; iChöông 4 Quaù taûi haøm 107Ví duï 1.3#include #include // included for sscanf()class date { int day, month, year;public: date(char *str); date (int m, int d, int y) { day = d; month = m; year = y; } void show() { cout Chöông 4 Quaù taûi haøm 108 • Quaù taûi haøm taïo khi maûng ñoäng cuûa lôùp ñöôïc caáp phaùt. Ñieàu naøy giuùp giaûi quyeát haïn cheá trong chöông 3, phaàn IV/2, moät maûng ñoäng khoâng theå ñöôïc khôûi ñaàu, xem ví duï 4.6.Ví duï 1.4#include class myclass { int x;public: // overload constructor two ways myclass() { x = 0; } // no initializer myclass(int n) { x = n; } // initializer int getx() { return x; } void setx(int n) { x = n; }};int main(){ myclass *p; myclass ob(10); // initialize single variable p = new myclass[10]; // cant use initializers here if(!p) { cout Chöông 4 Quaù taûi haøm 109 return 0;}Baøi taäp I1. Cho lôùp sau, haõy boå sung hai haøm taïo. Haøm taïo thöù nhaát khoâng nhaän tham soá,haøm naøy duøng toaùn töû new caáp phaùt 255 bytes boä nhôù, khôûi ñaàu boä nhôù nhö moätchuoãi roãng vaø cho len = 255. Haøm taïo thöù hai nhaän hai tham soá, tham soá thöù nhaát laøchuoãi duøng ñeå khôûi ñaàu vaø tham soá kia laø soá byte ñeå caáp phaùt. Cho phieân baûn naøycaáp phaùt löôïng boä nhôù ñaõ ñöôïc chæ roõ vaø cheùp chuoåi vaøo boä nhôù.Thöïc hieän vieäc kieåm tra giôùi haïn bieân caàn thieát vaø chöùng toû caùc haøm taïo seõ hoaïtñoäng qua moät chöông trình ngaén.class strtype { char *p; int len;public: char *getstring() { return p; } int getlength() { return len; }};2. Töø baøi taäp II, 2 chöông 2, boå sung haøm taïo khoâng nhaän tham soá vaø moät phieân baûnñöôïc quaù taûi ñeå nhaän giôø heä thoáng döôùi daïng ñöôïc traû veà bôûi haøm chuaån clock().II/ Taïo vaø söû duïng haøm taïo baûn sao (copy constructor)1/ Khaùi nieäm Haøm taïo baûn sao laø kieåu ñaëc bieät cuûa haøm taïo ñöôïc quaù taûi.Khi moät ñoái töôïng ñöôïc truyeàn cho moät haøm, baûn sao töøng bit moät cuûa ñoái töôïng ñoùñöôïc taïo ra vaø ñöôïc truyeàn cho tham soá cuûa haøm ñeå nhaän ñoái töôïng. 109Chöông 4 Quaù taûi haøm 110Tuy nhieân, coù nhöõng tröôøng hôïp trong ñoù baûn sao ñoàng nhaát laø nhö khoâng mongmuoán.Chaúng haïn, neáu ñoái töôïng coù con troû tôùi boä nhôù ñöôïc caáp phaùt, thì baûn sao seõ troû tôùicuøng boä nhôù nhö ñoái töôïng goác ñaõ laøm. Do ñoù, neáu baûn sao taïo ra söï thay ñoåi cho noäidung boä nhôù thì noù cuõng seõ ñöôïc thay ñoåi ñoái v ...
Nội dung trích xuất từ tài liệu:
Kỹ thuật lập trình hướng đối tư - Chapter 4Chöông 4 Quaù taûi haøm • Quaù taûi haøm taïo • Haøm taïo baûn sao • Haøm vôùi caùc ñoái soá maëc ñònh • Tính khoâng xaùc ñònh khi quaù taûi haøm • Ñiaï chæ cuûa haøm quaù taûiChöông 4 Quaù taûi haøm 104104Chöông 4 Quaù taûi haøm 105I/ Quaù taûi haøm taïo (constructor overloading )Coù theå quaù taûi haøm taïo cuûa moät lôùp, nhöng khoâng quaù taûi haøm huûy.Haøm taïo cuûa lôùp phaûi phuø hôïp vôùi caùch maø ñoái töôïng cuûa lôùp ñoù ñöôïc khai baùo. Neáukhoâng loãi thôøi gian bieân dòch seõ xaûy ra.Coù 3 lyù do caàn quaù taûi haøm taïo : + ñeå coù tính linh hoaït + ñeå hoå trôï maûng + ñeå taïo caùc haøm taïo baûn saoHaïn cheá : neáu thöïc hieän quaù taûi nhieàu laàn coù theå taïo ra taùc duïng huûy hoaïi treân lôùp. • Quaù taûi haøm taïo vôùi khôûi ñaàu moät ñoái töôïng hoaëc khoâng khôûi ñaàu ñoái töôïngVí duï 1.1#include class myclass { int x;public: // overload constructor two ways myclass() { x = 0; } // no initializer myclass(int n) { x = n; } // initializer int getx() { return x; }};int main(){ myclass o1(10); // declare with initial value myclass o2; // declare without initializer cout Chöông 4 Quaù taûi haøm 106 • Quaù taûi haøm taïo ñeå cho caùc ñoái töôïng rieâng leõ laãn caùc maûng ñoái töôïng xaûy ra trong chöông trình.Ví duï 1.2#include class myclass { int x;public: // overload constructor two ways myclass() { x = 0; } // no initializer myclass(int n) { x = n; } // initializer int getx() { return x; }};int main(){ myclass o1[10]; // declare array without initializers myclass o2[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // declare with initializers int i; for(i=0; iChöông 4 Quaù taûi haøm 107Ví duï 1.3#include #include // included for sscanf()class date { int day, month, year;public: date(char *str); date (int m, int d, int y) { day = d; month = m; year = y; } void show() { cout Chöông 4 Quaù taûi haøm 108 • Quaù taûi haøm taïo khi maûng ñoäng cuûa lôùp ñöôïc caáp phaùt. Ñieàu naøy giuùp giaûi quyeát haïn cheá trong chöông 3, phaàn IV/2, moät maûng ñoäng khoâng theå ñöôïc khôûi ñaàu, xem ví duï 4.6.Ví duï 1.4#include class myclass { int x;public: // overload constructor two ways myclass() { x = 0; } // no initializer myclass(int n) { x = n; } // initializer int getx() { return x; } void setx(int n) { x = n; }};int main(){ myclass *p; myclass ob(10); // initialize single variable p = new myclass[10]; // cant use initializers here if(!p) { cout Chöông 4 Quaù taûi haøm 109 return 0;}Baøi taäp I1. Cho lôùp sau, haõy boå sung hai haøm taïo. Haøm taïo thöù nhaát khoâng nhaän tham soá,haøm naøy duøng toaùn töû new caáp phaùt 255 bytes boä nhôù, khôûi ñaàu boä nhôù nhö moätchuoãi roãng vaø cho len = 255. Haøm taïo thöù hai nhaän hai tham soá, tham soá thöù nhaát laøchuoãi duøng ñeå khôûi ñaàu vaø tham soá kia laø soá byte ñeå caáp phaùt. Cho phieân baûn naøycaáp phaùt löôïng boä nhôù ñaõ ñöôïc chæ roõ vaø cheùp chuoåi vaøo boä nhôù.Thöïc hieän vieäc kieåm tra giôùi haïn bieân caàn thieát vaø chöùng toû caùc haøm taïo seõ hoaïtñoäng qua moät chöông trình ngaén.class strtype { char *p; int len;public: char *getstring() { return p; } int getlength() { return len; }};2. Töø baøi taäp II, 2 chöông 2, boå sung haøm taïo khoâng nhaän tham soá vaø moät phieân baûnñöôïc quaù taûi ñeå nhaän giôø heä thoáng döôùi daïng ñöôïc traû veà bôûi haøm chuaån clock().II/ Taïo vaø söû duïng haøm taïo baûn sao (copy constructor)1/ Khaùi nieäm Haøm taïo baûn sao laø kieåu ñaëc bieät cuûa haøm taïo ñöôïc quaù taûi.Khi moät ñoái töôïng ñöôïc truyeàn cho moät haøm, baûn sao töøng bit moät cuûa ñoái töôïng ñoùñöôïc taïo ra vaø ñöôïc truyeàn cho tham soá cuûa haøm ñeå nhaän ñoái töôïng. 109Chöông 4 Quaù taûi haøm 110Tuy nhieân, coù nhöõng tröôøng hôïp trong ñoù baûn sao ñoàng nhaát laø nhö khoâng mongmuoán.Chaúng haïn, neáu ñoái töôïng coù con troû tôùi boä nhôù ñöôïc caáp phaùt, thì baûn sao seõ troû tôùicuøng boä nhôù nhö ñoái töôïng goác ñaõ laøm. Do ñoù, neáu baûn sao taïo ra söï thay ñoåi cho noäidung boä nhôù thì noù cuõng seõ ñöôïc thay ñoåi ñoái v ...
Tìm kiếm theo từ khóa liên quan:
ngôn ngữ lập trình lập trình C giáo trình lập trình hàm lập trình nhập xuất CGợi ý tài liệu liên quan:
-
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 274 0 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 265 0 0 -
Bài thuyết trình Ngôn ngữ lập trình: Hệ điều hành Window Mobile
30 trang 265 0 0 -
Giáo trình Lập trình cơ bản với C++: Phần 1
77 trang 232 0 0 -
Bài giảng Một số hướng nghiên cứu và ứng dụng - Lê Thanh Hương
13 trang 224 0 0 -
Giáo án Tin học lớp 11 (Trọn bộ cả năm)
125 trang 217 1 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 206 0 0 -
Bài tập lập trình Windows dùng C# - Bài thực hành
13 trang 184 0 0 -
Giáo trình Lập trình C căn bản: Phần 1
64 trang 170 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 166 0 0