Bài giảng Lập trình hướng đối tượng - Các đặc điểm C++ áp dụng cho Class

Các đặc điểm cơ bản của C++ như const, static, . áp dụ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

 

ppt29 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 2114 | Lượt tải: 2download
Tóm tắt nội dung Bài giảng Lập trình hướng đối tượng - Các đặc điểm C++ áp dụng cho Class, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Các đặc điểm C++ áp dụng cho class Lập trình hướng đối tượng Tài liệu đọc Eckel, Bruce. Thinking in C++, 2nd Ed. Vol 1. Chapter 8: Constants Start at p. 352 (Classes) Chapter 10: Name Control p. 423 (Static Members in C++) to p. 442 (Alternate Linkage Specifications) Dietel. C++ How to Program, 4th Ed. Chapter 7: Class II 7.2, 7.3, 7.6, 7.7, 7.8 Tổng quan Các đặc điểm cơ bản của C++ như const, static, ... áp dụ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 Hằng thành viên – const member Ta đã biết về từ khoá const dùng với các biến thông thường 	const int x = 50; Từ khoá const đối với các thành viên dữ liệu như thế nào? 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 member }; Hằng thành viên – const member khởi tạo hằng thành viên khi nào? Bên trong khai báo class? Quá sớm, ta chưa có đối tượng nào, không có chỗ để lưu giá trị 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ó được gán. Giải pháp: danh sách khởi tạo tại constructor – member initialization list Hằng thành viên – const member danh sách khởi tạo của constructor nằm tại định nghĩa của constructor, chứa một tập các "lời gọi constructor" mà sẽ được thực hiệ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 argument private: const int foo; // Declares foo a constant member }; ... MyClass::MyClass(int x) : foo(x) { // constructor body } Hằng thành viên – const member Danh sách khởi tạo – Ví dụ class MyClass { public: MyClass(int x = 5, int y); // Constructor w/default argument private: const int foo; // Declares foo a constant member const int bar; }; ... MyClass::MyClass(int x, int y) : foo(x), bar(y) { // constructor body } Hằng thành viên – const member Điều quan trọng cần nhớ: hằng thành viên của một đối tượng không thay đổi giá trị trong suốt thời gian sống củ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ại có hằng foo có giá trị 10. Tiếp theo, ta sẽ tìm hiểu cách định nghĩa các thành viên dữ liệu được dùng chung bởi tất cả các đối tượng thuộc cùng một lớp Thành viên tĩnh – static member void myCounter() { static int count = 0; // Static variable count++; cout count++; // Increment the static count } MyClass::~MyClass() { this->count--; // Decrement the static count } void MyClass::printCount() { cout count 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 Hằng thành viên tĩnh 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. Không như các thành viên khác, các thành viên static const phải được khở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 Hằng thành viên tĩnh 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ốt thờ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ại tất cả các đối tượng của một lớp Hằng phương thức – const method 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); 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); ///... }; Hằng phương thức – const method Còn tham số ẩn truyền bằng con trỏ this và chính là đối tượng chủ? 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 { // ... } Hằng phương thức – const method Đối với các hằng đối tượng, trình biên dịch chỉ cho phép gọi các hằng phương thức để đảm bảo nó không sửa đổi đối tượng chủ Trình biên dịch sẽ báo lỗi nếu một hằng phương thức sử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ác thành viên dữ liệu tĩnh của lớp do các thành viên tĩnh độc lập với các đối tượng, như vậy sửa đổi chúng không vi phạm tính bất biến của đối tượng 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ớ. Phương thức tĩnh – static method Từ khoá static còn được dùng cho các phương thức  phương thức tĩnh Một phương thức tĩnh có thể được gọi một cách độc lập vớ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ức tĩnh. có thể gọi phương thức tĩnh mà không cần tạo thể hiện nào của lớp - gọi thẳng bằng tên lớp Phương thức tĩnh – static method Khai báo: class MyClass { public: MyClass(); // Constructor ~MyClass(); // Destructor static void printCount(); // Output current value of count private: static int count; // count }; dùng tên lớp kèm theo toán tử phạm vi (::) để gọi phương thức tĩnh MyClass::printCount(); hoặc có thể dùng đối tượng sẵn có để gọi phương thức tĩnh MyClass x; x.printCount(); Phương thức tĩnh – static method Ví dụ int main() { MyClass::printCount(); MyClass* x = new MyClass; x->printCount(); MyClass* y = new MyClass; x->printCount(); y->printCount(); delete x; y->printCount(); } There are currently 0 instance(s) of MyClass. 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. Hằng đối tượng – const object hằng đối tượng: trình biên dịch sẽ đảm bảo rằng không một thành viên dữ liệu nào có thể bị sửa đổi sau khi đối tượng được khởi tạo kể cả các thành viên public không phải là hằng khai báo: const MyClass x(5);	// x là hằng 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 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; ... }; Làm việc với đối tượng Đế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 Trước khi tiếp tục, ta nên tóm tắt lại một số cách sử dụng đối tượng trong C++ 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 Làm việc với đối tượng Đ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 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 cài sẵn, ta cũng có thể thực hiện đối với các lớp Làm việc với đối tượng Làm việc với đối tượng Làm việc với đối tượng 

File đính kèm:

  • pptBài giảng Lập trình hướng đối tượng - Các đặc điểm C++ áp dụng cho Class.ppt
Tài liệu liên quan