Các đặc điểm C++ áp dụng cho class

15 503 1
Các đặc điểm C++ áp dụng cho class

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Các đặc điểm C++ áp dụng cho class

Các đặc điểm C++áp dụng cho classLập trình hướng đối tượng@ 2004 Trần Minh Châu. FOTECH. VNU2Tài liệu đọcn Eckel, Bruce. Thinking in C++, 2ndEd. Vol 1.¨ Chapter 8: Constantsn Start at p. 352 (Classes)¨ Chapter 10: Name Controln p. 423 (Static Members in C++) to p. 442 (Alternate LinkageSpecifications)n Dietel. C++ How to Program, 4thEd.¨ Chapter 7: Class IIn 7.2, 7.3, 7.6, 7.7, 7.8 @ 2004 Trần Minh Châu. FOTECH. VNU3Tổng quann Các đặc điểm cơ bản của C++ như const, static, .ápdụng cho các lớp như thế nào?¨ hằng thành viên–const member¨ thành viên tĩnh–static member¨ hằng thành viên tĩnh–const static member¨ hằng hàm/phương thức–const method¨ hàm/phương thức tĩnh–static method¨ làm việc với các đối tượng@ 2004 Trần Minh Châu. FOTECH. VNU4Hằng thành viên–const membern Ta đãbiết về từ khoá const dùng với các biến thông thườngconst int x = 50;n Từ khoá const đối với các thành viên dữ liệu như thế nào?n Khi một thành viên dữ liệu được khai báo là const, thành viên đósẽ giữ nguyên giátrị trong suốt thời gian sống của đối tượng chủ.class MyClass {public:MyClass(int x = 5); // Constructor w/default argumentprivate:const int foo; // Declares foo a constant member}; @ 2004 Trần Minh Châu. FOTECH. VNU5Hằng thành viên–const memberkhởi tạo hằng thành viênkhi nào?n Bên trong khai báo class? Quásớm, ta chưa có đốitượng nào, không cóchỗđể lưu giátrịn Gán trị trong thân hàm constructor? Quámuộn, khôngđảm bảo hằng không được truy nhập trước khi nó đượcgán.n Giải pháp: danh sách khởi tạo tại constructor–memberinitialization list@ 2004 Trần Minh Châu. FOTECH. VNU6Hằng thành viên–const membern danh sách khởi tạo của constructor nằm tại định nghĩa củaconstructor, chứa một tập các "lời gọi constructor" màsẽđược thựchiện trước khi thực thi phần thân của constructor đó.¨ khi dùng cho các hằng thành viên, danh sách khởi tạo đảm bảo chúngđược khởi tạo trước khi được truy nhập¨ chi tiết thêm tại phần thừa kế.class MyClass {public:MyClass(int x = 5); // Constructor w/default argumentprivate:const int foo; // Declares foo a constant member}; .MyClass::MyClass(int x) : foo(x){ // constructor body }danh sách khởi tạo củaconstructordấu hai chấm tách giữadanh sách tham số vàdanh sách khởi tạo @ 2004 Trần Minh Châu. FOTECH. VNU7Hằng thành viên–const membern Danh sách khởi tạo–Vídụclass MyClass {public:MyClass(int x = 5); // Constructor w/default argumentprivate:const int foo; // Declares foo a constant memberconst int bar;}; .MyClass::MyClass(int x, int y) : foo(x), bar(y){ // constructor body }danh sách khởi tạo của constructor,khởi tạo hằng foo với giátrị của x ,khởi tạo hằng bar với giátrị của y.dấu phảy tách giữa cácthành phần của danh sáchkhởi tạo@ 2004 Trần Minh Châu. FOTECH. VNU8Hằng thành viên–const membern Điều quan trọng cần nhớ: hằng thành viên của một đốitượng không thay đổi giátrị trong suốt thời gian sốngcủa đối tượng đó.¨ Các hằng của các đối tượng khác nhau (thuộc cùng một lớp)không cóquan hệ gìvới nhau¨ Vídụ, một đối tượng thuộc lớp MyClass cóhằng foo với giátrị5,trong khi đó, một đối tượng khác cùng thuộc lớp MyClass lạicóhằng foo cógiátrị 10.n Tiếp theo, ta sẽ tìm hiểu cách định nghĩa các thành viêndữ liệu được dùng chung bởi tất cả các đối tượng thuộccùng một lớp @ 2004 Trần Minh Châu. FOTECH. VNU9Thành viên tĩnh–static membervoid myCounter(){static int count = 0; // Static variablecount++;cout <<“This function has been invoked“<< count <<“time(s). << endl;}int main(){for (int i = 1; i <= 3; i++){myCounter();}}This function has been invoked 1 time(s).This function has been invoked 2 time(s).This function has been invoked 3 time(s).n Đối với biến thông thường, static dùng để khai báo các biến tĩnhtồn tại trong suốt quátrình chạy của chương trình.@ 2004 Trần Minh Châu. FOTECH. VNU10Thành viên tĩnh–static memberTương tự giữa biến tĩnh vàthành viên tĩnhn biến staticxđược khai báo trong hàm f(),¨ một bản duy nhất tồn tại trong suốt quátrình chạy của chương trình.¨ dùng chung cho tất cả các lần chạy hàm f(),¨ bất kể hàm f() được gọi bao nhiêu lầnn Đối với class, static dùng để khai báo thành viên dữ liệu dùngchung cho mọi thể hiện của lớp.¨ một bản duy nhất tồn tại trong suốt quátrình chạy của chương trình,¨ dùng chung cho tất cả các thể hiện của lớp,¨ bất kể lớp đócóbao nhiêu thể hiện @ 2004 Trần Minh Châu. FOTECH. VNU11n Đếm sốđối tượng MyClass¨ khai báo lớp MyClassThành viên tĩnh-Vídụclass MyClass {public:MyClass(); // Constructor~MyClass(); // Destructorvoid printCount(); // Output current value of countprivate:static int count; // static memberto store// number of instances of MyClass};thành viên tĩnh count@ 2004 Trần Minh Châu. FOTECH. VNU12¨cài đặt các phương thứcThành viên tĩnh-Vídụint MyClass::count = 0;MyClass::MyClass() {this->count++; // Increment the static count}MyClass::~MyClass() {this->count--; // Decrement the static count}void MyClass::printCount() {cout << "There are currently " << this->count<< " instance(s) of MyClass.\n";}Khởi tạo biến đếm bằng 0, vìban đầu không có đối tượng nào @ 2004 Trần Minh Châu. FOTECH. VNU13Thành viên tĩnh–static memberĐịnh nghĩa vàkhởi tạon thành viên tĩnh được lưu trữđộc lập với các thể hiện của lớp, do đó,các thành viên tĩnh phải được định nghĩaint MyClass::count;n ta thường định nghĩa các thành viên tĩnh trong file chứa định nghĩacác phương thứcn nếu muốn khởi tạo giátrị cho thành viên tĩnh ta cho giátrị khởi tạotại định nghĩaint MyClass::count = 0;@ 2004 Trần Minh Châu. FOTECH. VNU14Thành viên tĩnh–static memberint main(){MyClass* x = new MyClass;x->PrintCount();MyClass* y = new MyClass;x->PrintCount();y->PrintCount();delete x;y->PrintCount();}There are currently 1 instance(s) of MyClass.There are currently 2 instance(s) of MyClass.There are currently 2 instance(s) of MyClass.There are currently 1 instance(s) of MyClass.¨ chương trình demo sử dụng MyClass @ 2004 Trần Minh Châu. FOTECH. VNU15Hằng thành viên tĩnhn Kết hợp hai từ khoáconst vàstatic, ta cóhiệu quả kết hợp¨ một thành viên dữ liệu được định nghĩa là static const làmột hằngđược chia sẻ giữa tất cả các đối tượng của một lớp.n Không như các thành viên khác, các thành viên static const phảiđượckhởi tạo khi khai báoclass MyClass{public:MyClass();~MyClass();private:static const int thirteen = 13;};int main(){MyClass x;MyClass y;MyClass z;}x, y, z dùng chung một thành viênthirteen cógiátrị không đổi là 13@ 2004 Trần Minh Châu. FOTECH. VNU16Hằng thành viên tĩnhn Tóm lại, ta nên khai báo:¨ staticđối với các thành viên dữ liệu ta muốn dùng chung cho mọi thểhiện của một lớp¨ constđối với các thành viên dữ liệu cần giữ nguyên giátrị trong suốtthời gian sống của một thể hiện¨ static constđối với các thành viên dữ liệu cần giữ nguyên cùng một giátrị tạitất cả các đối tượng của một lớp @ 2004 Trần Minh Châu. FOTECH. VNU17Hằng phương thức–const methodn Từ khoá const được dùng cho các tham số của hàm đểđảm bảo các tham sốđược truyền cho hàm sẽ không bịhàm sửa đổi.int myFunction(const int& x);n Cúpháp này cũng được dùng cho phương thức với hiệuquả tương tựclass MyClass {// .MyMethod(const int& x);/// .};x được truyền bằng hằng tham chiếux sẽ không bị hàm/phương thức sửa đổi@ 2004 Trần Minh Châu. FOTECH. VNU18Hằng phương thức–const methodn Còn tham sốẩn truyền bằng con trỏ this vàchính là đốitượng chủ?n Hằng phương thức làcúpháp cho phép ta đảm bảo vớitrình biên dịch rằng phương thức sẽ không sửa đổi đốitượng chủclass MyClass { .void printCount() const; .}; .void MyClass::PrintCount() const{// .}phải cótừkhóa const ở cả khai báovà định nghĩa phương thức @ 2004 Trần Minh Châu. FOTECH. VNU19Hằng phương thức–const methodn Đối với các hằng đối tượng, trình biên dịch chỉ cho phépgọi các hằng phương thức¨ đểđảm bảo nókhông sửa đổi đối tượng chủn Trình biên dịch sẽ báo lỗi nếu một hằng phương thứcsửa đổi giátrị của thành viên bất kỳ của đối tượng¨ Tuy nhiên, hằng phương thức được phép sửa giátrị của cácthành viên dữ liệu tĩnh của lớpn do các thành viên tĩnh độc lập với các đối tượng, như vậy sửa đổichúng không vi phạm tính bất biến của đối tượngn Nói chung, ta nên khai báo mọi phương thức truy vấn làhằng, vừa để báo với trình biên dịch, vừa để tự gợi nhớ.@ 2004 Trần Minh Châu. FOTECH. VNU20Phương thức tĩnh–static methodn Từ khoá static còn được dùng cho các phương thứcà phương thức tĩnhn Một phương thức tĩnh cóthểđược gọi một cách độc lậpvới mọi thể hiện của lớp¨ phương thức tĩnh không được truyền con trỏ this làm tham sốẩn.¨ không thể sửa đổi các thành viên dữ liệu từ trong phương thứctĩnh.¨ cóthể gọi phương thức tĩnh màkhông cần tạo thể hiện nào củalớp-gọi thẳng bằng tên lớp [...].. .Các đặc điểm C++ áp dụng cho class Lập trình hướng đối tượng @ 2004 Trần Minh Châu. FOTECH. VNU 2 Tài liệu đọc n Eckel, Bruce. Thinking in C++, 2 nd Ed. Vol 1. ă Chapter 8: Constants n Start at p. 352 (Classes) ă Chapter 10: Name Control n p. 423 (Static Members in C++) to p. 442 (Alternate Linkage Specifications) n Dietel. C++ How to Program, 4 th Ed. ă Chapter 7: Class II n 7.2, 7.3,... Không như các thành viên khác, các thành viên static const phải đượckhởi tạo khi khai báo class MyClass { public: MyClass(); ~MyClass(); private: static const int thirteen = 13; }; int main() { MyClass x; MyClass y; MyClass z; } x, y, z dùng chung một thành viên thirteen cógiátrị khơng đổi là 13 @ 2004 Trần Minh Châu. FOTECH. VNU 16 Hằng thành viờn tnh n Túm li, ta nờn khai bỏo: ă static i vi các thành... FOTECH. VNU 3 Tổng quan n Các đặc điểm cơ bản của C++ như const, static, áp dụng cho cỏc lp nh th no? ă hng thnh viờnconst member ă thnh viờn tnhstatic member ă hng thnh viờn tnhconst static member ă hng hm/phng thcconst method ă hm/phng thc tnhstatic method ă lm vic vi các đối tượng @ 2004 Trần Minh Châu. FOTECH. VNU 4 Hằng thành viên–const member n Ta đãbiết về từ khoá const dùng với các biến thơng thường const... dữ liệu cài sẵn, ta cũng cóthể thực hiện đối với các lớp @ 2004 Trần Minh Châu. FOTECH. VNU 17 Hằng phương thức–const method n Từ khoá const được dùng cho các tham số của hàm để đảm bảo các tham sốđược truyền cho hàm sẽ không bị hàm sửa đổi. int myFunction(const int& x); n Cúpháp này cũng được dùng cho phương thức với hiệu quả tương tự class MyClass { // MyMethod(const int& x); /// }; x... được khởi tạo n kể cả các thành viên public khụng phi lhng ă khai bỏo: const MyClass x(5);// x lhng n Khi làm việc với hằng đối tượng, ta chỉ cóthể gọi các hàm thành viên làhằng-const hoặc tĩnh-static @ 2004 Trần Minh Châu. FOTECH. VNU 24 Hằng đối tượng. Vídụ class MyClass { public: MyClass(); ~MyClass(); static void printCount(); void foo() const; void bar(); const int x; int y; }; const MyClass x; cout... tóm tắt lại một số cách sử dụng đối tượng trong C++ n Kèm thêm một số lưu ý về vấn đề liên quan tới quản lý bộ nhớ vàlập trình hướng đối tượng @ 2004 Trần Minh Châu. FOTECH. VNU 26 Làm việc với đối tượng n Điều quan trọng cần nhớ về các đối tượng là: tại cốt lõi, chúng chẳng qua chỉ l các kiểu dữ liệu người dùng tự định nghĩa n Cónghĩa là, hầu như tất cả những gìta cóthể làm đối với các kiểu dữ liệu... liệu ta muốn dùng chung cho mi th hin ca mt lp ă const i vi cỏc thnh viờn dữ liệu cần giữ nguyên giátrị trong suốt thời gian sống ca mt th hin ă static const i vi cỏc thnh viờn dữ liệu cần giữ nguyên cùng một giátrị tại tất cả các đối tượng của một lớp @ 2004 Trần Minh Châu. FOTECH. VNU 25 Làm việc với đối tượng n Đến đây, ta đãgặp các vídụvềcách khai báo, khởi tạo, vàlàm việc với các đối tượng n Trước... VNU 18 Hằng phương thức–const method n Còn tham sốẩn truyền bằng con trỏ this vàchính là đối tượng chủ? n Hằng phương thức làcúpháp cho phép ta đảm bảo với trình biên dịch rằng phương thức sẽ không sửa đổi đối tượng chủ class MyClass { void printCount() const; }; void MyClass::PrintCount() const { // } phải cótừkhóa const ở cả khai báo và định nghĩa phương thức ... member n Ta đãbiết về từ khoá const dùng với các biến thơng thường const int x = 50; n Từ khố const đối với các thành viên dữ liệu như thế nào? n Khi một thành viên dữ liệu được khai báo là const, thành viên đó sẽ giữ nguyên giátrị trong suốt thời gian sống của đối tượng chủ. class MyClass { public: MyClass(int x = 5); // Constructor w/default argument private: const int foo; // Declares foo a constant... change–OK x.x++;//Error x.y++;//Error const MyClass x; x.printCount();// static-OK x.foo();// const-OK x.bar();// non-const-error không thể sửa thành viên, dùlà public không phải hằng chỉ được gọi hàm thành viên làhằng hoặc tĩnh @ 2004 Trần Minh Châu. FOTECH. VNU 15 Hằng thành viên tĩnh n Kết hợp hai từ khốconst vàstatic, ta cóhiệu quả kết hp ă mt thnh viờn d liu c nh ngha l static const làmột hằng được chia sẻ giữa tất cả các đối tượng . Các đặc điểm C++ p dụng cho classLập trình hướng đối tượng@ 2004 Trần Minh Châu. FOTECH. VNU2Tài liệu đọcn Eckel, Bruce. Thinking in C++, 2ndEd.. Chapter 7: Class IIn 7.2, 7.3, 7.6, 7.7, 7.8 @ 2004 Trần Minh Châu. FOTECH. VNU3Tổng quann Các đặc điểm cơ bản của C++ như const, static, ...ápdụng cho các lớp

Ngày đăng: 04/09/2012, 14:58

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan