Giáo tình Lập trình Hướng đối tượng - Chương 2: Lớp và đối tượng
Bạn đang xem tài liệu "Giáo tình Lập trình Hướng đối tượng - Chương 2: Lớp và đối tượng", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- giao_tinh_lap_trinh_huong_doi_tuong_chuong_2_lop_va_doi_tuon.pdf
Nội dung text: Giáo tình Lập trình Hướng đối tượng - Chương 2: Lớp và đối tượng
- 3/27/2012 TRƯỜNG ĐẠI HỌC DÂN LẬP HẢI PHÒNG KHOA CÔNG NGHỆ THÔNG TIN Chương 2: Lớp và đối tượng BỘ MÔN MẠNG VÀ HTTT 2.1. Giới thiệu • Lớp đối tượng = Mô tả cho một tập các đối tượng có tập thuộc tính và hành vi giống nhau. LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG • Đối tượng là một thể hiện cụ thể của lớp • Chương trình hướng cấu trúc được xây dựng dựa trên một tập các hàm • Chương trình hướng đối tượng được xây dựng dựa trên các đối tượng Đối tượng = Thuộc tính + Phương thức Hải phòng, 2012 1 2 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.2. Cài đặt kiểu dữ liệu người dùng bằng 2.2. Cài đặt kiểu dữ liệu người dùng bằng struct struct 2.2.1. Khai báo kiểu cấu trúc 2.2.3. Truy nhập biến cấu trúc struct • Sử dụng toán tử chấm (.) theo cú pháp { Tên biến cấu trúc.tên thành viên // Khai báo các trường dữ liệu // Khai báo hàm xử lý dữ liệu }; 2.2.2. Khai báo biến cấu trúc 3 4 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.2. Cài đặt kiểu dữ liệu người dùng bằng 2.2. Cài đặt kiểu dữ liệu người dùng bằng struct struct 2.2.3. Truy nhập biến cấu trúc 2.2.3. Truy nhập biến cấu trúc • Ví dụ: Nhập từ bàn phím hai số nguyên struct PhepToan { a,b và một dấu phép toán số học (+;- // Khai bao cac thanh phan du lieu ;*;/). Thực hiện phép toán và in kết quả int a,b ; ra màn hình. float c ; char dau ; • Văn bản chương trình #include // Khai bao ham khoi tao PhepToan() #include { c=0 ; } 5 6 1
- 3/27/2012 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.2. Cài đặt kiểu dữ liệu người dùng bằng 2.2. Cài đặt kiểu dữ liệu người dùng bằng struct struct 2.2.3. Truy nhập biến cấu trúc 2.2.3. Truy nhập biến cấu trúc // Khai bao cac ham thao tac tren du lieu void tinh() void nhap() { switch(dau) { { cout >a; case '+' : c = a+b ; break ; cout >b; case '-' : c = a-b ; break ; case '*' : c = a*b ; break ; cout >dau ; case '/' : c = (float)a/b ; break ; cout public: # include // Khai báo các thành phần cho phép dùng chung của từng đối tượng }; 11 12 2
- 3/27/2012 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.3. Cài đặt kiểu dữ liệu người dùng bằng 2.3. Cài đặt kiểu dữ liệu người dùng bằng class class 2.3.1. Khai báo lớp 2.3.1. Khai báo lớp class point // Định nghĩa các hàm thành viên bên ngoài lớp { void point::init(int ox, int oy) // Khai báo các thành phần dữ liệu dùng riêng { private: cout<<"Ham thanh viên init"<<endl; int x,y; // Khai báo các hàm thành phần cho phép dùng chung x = ox ; y = oy; public: } void init(int ox, int oy); void move(int dx, int dy) ; void display(); }; 13 14 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.3. Cài đặt kiểu dữ liệu người dùng bằng 2.3. Cài đặt kiểu dữ liệu người dùng bằng class class 2.3.1. Khai báo lớp 2.3.1. Khai báo lớp // Định nghĩa các hàm thành viên bên ngoài lớp // Định nghĩa các hàm thành viên bên ngoài lớp void point::move(int dx, int dy) void point::display() { { cout<<"Ham thanh vien move"<<endl; cout<<"Ham thanh vien display"<<endl; x += dx; y +=dy; cout<<"Toa do diem("<<x<<","<<y<<")"; } } 15 16 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.3. Cài đặt kiểu dữ liệu người dùng bằng 2.3. Cài đặt kiểu dữ liệu người dùng bằng class class 2.3.1. Khai báo lớp 2.3.1. Khai báo lớp void main() Nhận xét: { • Có thể định nghĩa hàm thành viên bên trong clrscr(); lớp hoặc bên ngoài lớp. point p ; • Hàm thành viên định nghĩa bên trong lớp không p.init(2,4); // Goi ham thanh viên tu doi tuong được phép có lệnh switch hoặc lệnh lặp p.display(); • Truyền thông báo cho đối tượng chính là lời gọi p.move(1,2); hàm thành viên của đối tượng (Yêu cầu đối p.display(); tượng thực thi một chức năng của nó) getch(); } 17 18 3
- 3/27/2012 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.3. Cài đặt kiểu dữ liệu người dùng bằng 2.3. Cài đặt kiểu dữ liệu người dùng bằng class class 2.3.2. Khai báo đối tượng 2.3.2. Khai báo đối tượng Cú pháp Lớp Khung dữ liệu • Tên lớp ; Phương thức • hoặc Tên lớp ; Các đối tượng thuộc cùng lớp có: • Tập thuộc tính riêng Dữ liệu cụ thể 1 Dữ liệu cụ thể 2 • Các phương thức được dùng chung cho tất cả Phương thức Phương thức các đối tượng thuộc lớp Đối Lớp là kiểu dữ liệu, đối tượng là biến có Đối Đối tượng là một tượng kiểu lớp tượng 19 thể hiện của lớp 20 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.3. Cài đặt kiểu dữ liệu người dùng bằng 2.3. Cài đặt kiểu dữ liệu người dùng bằng class class 2.3.2. Khai báo đối tượng 2.3.2. Khai báo đối tượng 1. Các thành viên dữ liệu 2. Các thành viên hàm • Các thành viên dữ liệu của lớp được xem như • "Hàm thuộc lớp" được gọi "hàm thành viên" hay một biến có kiểu dữ liệu cơ sở: int, float, char phương thức. • "Hàm" là khái niệm để chỉ tới các hàm tự do • Các thành viên dữ liệu của lớp còn có thể là (hàm không thuộc lớp) như: hàm main() biến đối tượng của lớp đã có. • Hàm thành viên có thể định nghĩa bên trong • Các thành viên dữ liệu cũng có thể có kiểu con lớp hoặc bên ngoài lớp trỏ của lớp đang xây dựng 21 22 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.3. Cài đặt kiểu dữ liệu người dùng bằng 2.3. Cài đặt kiểu dữ liệu người dùng bằng class class 2.3.2. Khai báo đối tượng 2.3.2. Khai báo đối tượng 2. Các thành viên hàm 2. Các thành viên hàm • Hàm thành viên định nghĩa bên trong lớp theo • Hàm thành viên định nghĩa bên ngoài lớp theo cú pháp: cú pháp: (DSTSHT - nếu có) :: (DSTSHT - { nếu có) // Khai báo dữ liệu riêng { // Các câu lệnh // Khai báo dữ liệu riêng // return // Các câu lệnh } // return } 23 24 4
- 3/27/2012 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.4. Phạm vi lớp và truy nhập các thành viên 2.3. Cài đặt kiểu dữ liệu người dùng bằng lớp class Phạm vi lớp là phạm vi bên trong lớp và bên 2.3.2. Khai báo đối tượng ngoài lớp. 2. Các thành viên hàm • Phạm vi bên trong lớp: nằm bên trong cặp dấu Viết chương trình trên nhiều tệp { } của khai báo lớp • Tệp *.h chứa khai báo lớp, hàm thành viên class Tên Lớp • Tệp *.cpp chứa định nghĩa hàm thành viên và { hàm main() private: • Ví dụ: chương trình point2.cpp Phạm // Khai báo các thành phần riêng trong từng đối tượng vi bên public: trong // Khai báo và định nghĩa các thành phần cho phép dùng lớp chung của từng đối tượng }; 25 26 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.4. Phạm vi lớp và truy nhập các thành viên 2.4. Phạm vi lớp và truy nhập các thành viên lớp lớp Phạm vi lớp là phạm vi bên trong lớp và bên Truy nhập thành viên lớp ngoài lớp. • Lớp có tính đóng gói (bao gồm dữ liệu của lớp • Phạm vi bên ngoài lớp: nằm bên ngoài cặp dấu và các hàm thành viên thao tác trên dữ liệu) { } của khai báo lớp • Lớp có tính che dấu dữ liệu: Cho phép hoặc không cho phép truy nhập tới các thành viên của lớp • Truy nhập bên trong lớp: không bị kiểm soát • Truy nhập từ bên ngoài lớp: Có thể bị kiểm soát 27 28 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.5. Điều khiển truy nhập các thành viên lớp 2.6. Các hàm truy nhập và hàm tiện ích Để kiểm soát truy nhập tới các thành viên lớp Trong một lớp có hàm thành viên (phương từ bên ngoài lớp, sử dụng từ khóa sau: thức) có thể thuộc vùng public hoặc private • private: Thành viên thuộc vùng này chỉ được Các hàm thành viên public đóng vai trò là các phép truy nhập từ bên trong, không cho phép hàm giao diện (hàm truy nhập) của lớp truy nhập từ bên ngoài Các hàm thành viên private đóng vai trò là các • public: Thành viên thuộc vùng này được truy hàm tiện ích, cung cấp chức năng cho các hàm nhập tự do cả bên trong và bên ngoài lớp thành viên public (hỗ trợ cho hàm public) • protected: Thành viên thuộc vùng này được Hàm truy nhập có thể thực hiện các thao tác phép truy nhập từ bên trong và tại lớp dẫn nhập/xuất dữ liệu xuất, không cho phép truy nhập từ bên ngoài. Ví dụ về hàm truy nhập và hàm tiện ích 29 30 5
- 3/27/2012 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.7. Khởi tạo các đối tượng 2.7. Khởi tạo các đối tượng Trong đối tượng có thể có các thuộc tính cần Hàm tạo mặc định phải được khởi tạo giá trị ban đầu. Nếu không, • Bất kỳ lớp nào cũng phải có hàm tạo chương trình có thể sai kết quả. • Nếu người dùng không khai báo hàm tạo tường Ví dụ: Xây dựng lớp Mang, tính tổng các phần minh trong lớp tử mảng • Khi chạy chương trình C++ tự động tạo ra một Để khởi tạo giá trị tự động cho thuộc tính (nếu hàm tạo mặc định cho lớp. cần), sử dụng hàm khởi tạo (constructor) • Hàm tạo mặc định do C++ tạo ra là hàm rỗng Ví dụ: Xây dựng lớp Mang, tính tổng các phần (không có câu lệnh) tử mảng (bổ sung thêm constructor) • Hàm tạo mặc định do C++ tạo ra chỉ có tính chất đầy đủ mà thôi 31 32 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.7. Khởi tạo các đối tượng 2.8. Hủy bỏ các đối tượng Đặc điểm của constructor Một đối tượng khi không sử dụng nữa có thể • Tên của hàm tạo phải trùng với tên lớp được hủy bỏ (thu hồi lại vùng nhớ của nó) • Hàm tạo phải nằm trong vùng public Một đối tượng được gọi là hủy bỏ khi ta hủy bỏ các thành phần dữ liệu của nó. • Hàm tạo không có kiểu giá trị trả về (kể cả kiểu rỗng - void) Để hủy bỏ các thành phần dữ liệu của đối tượng ta xây dựng hàm hủy bỏ (destructor) • Hàm tạo có thể được đa năng hóa trong lớp. • Nếu lớp có nhiều hàm tạo thì khi khai báo đối Ví dụ tượng phải có các tham số phù hợp với một trong số các hàm tạo của lớp Ví dụ lớp vector n chiều Ví dụ: Ví dụ xem thêm Lớp vector n chiều 33 34 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.8. Hủy bỏ các đối tượng 2.8. Hủy bỏ các đối tượng Đặc điểm của hàm hủy Hàm hủy mặc định • Tên của hàm hủy đằng trước có dấu ~ và phải • Bất kỳ lớp nào cũng phải có hàm hủy trùng với tên lớp • Nếu người dùng không khai báo hàm hủy tường • Hàm hủy phải nằm trong vùng public minh trong lớp • Hàm hủy không có tham số hình thức và kiểu • Khi chạy chương trình C++ tự động tạo ra một giá trị trả về (kể cả kiểu rỗng - void) hàm hủy mặc định cho lớp. • Mỗi lớp có duy nhất một hàm hủy • Hàm hủy mặc định do C++ tạo ra là hàm rỗng • Hàm hủy không đa năng hóa được (không có câu lệnh) • Ví dụ • Hàm hủy mặc định do C++ tạo ra chỉ có tính chất đầy đủ mà thôi 35 36 6
- 3/27/2012 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.9. Khi nào hàm Tạo và hàm Hủy được gọi 2.10. Sử dụng các thành viên dữ liệu và Hàm tạo hàm thành viên • Được C++ tự động gọi và chỉ gọi duy nhất một Cú pháp chung truy nhập thành viên lớp lần khi đối tượng của lớp được tạo ra • . Hàm hủy • . • Được C++ tự động gọi khi đối tượng của lớp bị Truy nhập thành viên từ bên ngoài lớp khi xóa bỏ khỏi bộ nhớ thành viên đó phải nằm trong vùng khai báo public Truy nhập thành viên từ bên trong lớp thì không bị hạn chế Ví dụ 37 38 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.11. Trả về tham chiếu tới thành viên dữ 2.11. Trả về tham chiếu tới thành viên dữ liệu private liệu private Các thành viên dữ liệu khai báo trong vùng • Ví dụ private không cho phép truy nhập từ bên int a = 7; ngoài lớp. int p=&a; // p là biến tham chiếu tới a Nếu cần truy nhập tới các thành viên dữ liệu • Biến tham chiếu không có vùng nhớ riêng, private cần xây dựng thêm các hàm set và mà nó dùng chung vùng nhớ với biến nó get tham chiếu tới. Biến tham chiếu • Biến tham chiếu là bí danh của biến nó tham • Khai báo: chiếu tới =& tên biến đã tồn tại; 39 40 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.11. Trả về tham chiếu tới thành viên dữ 2.11. Trả về tham chiếu tới thành viên dữ liệu private liệu private • Hàm trả về tham chiếu #include & (DSTSHT - nếu có) #include { class test // Khai báo riêng { // Các câu lệnh private: int n; // return tên biến toàn cục; test() { n=-3;} } int& truynhapn() Ví dụ { return n;} }; 41 42 7
- 3/27/2012 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.11. Trả về tham chiếu tới thành viên dữ 2.12. Phép gán đối tượng mặc định liệu private Thực hiện trên 2 đối tượng cùng kiểu void main() Cơ chế thực hiện phép gán: Giả sử a,b là hai { đối tượng cùng kiểu. phép gán a=b; sẽ sao clrscr(); chép giá trị các thuộc tính của b cho các thuộc tính tương ứng của a. test ob; Ví dụ cout Thuộc tính Giá trị Giá trị Thuộc tính • Về lý thuyết không cho phép các phương thức a 3 3 a thay đổi giá trị các thuộc tính của đối tượng hằng. b 4 4 b • Do đó phương thức làm việc được với các thuộc c địa chỉ địa chỉ c vùng nhớ vùng nhớ tính của đối tượng hằng là phương thức tạo và phương thức hủy. 5 • Đối tượng hằng phải được khởi tạo trước khi sử Kết quả là thuộc tính c của hai đối tượng tg1, dụng tg2 cùng trỏ tới một ô nhớ (dùng chung một ô • Ví dụ nhớ) 47 48 8
- 3/27/2012 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.13. Đối tượng hằng và hàm thành viên 2.13. Đối tượng hằng và hàm thành viên hằng hằng Phương thức hằng Phương thức hằng • Cú pháp khai báo • Do phương thức hằng không được phép thay (DSTSHT - nếu có) const đổi giá trị các thuộc tính của đối tượng, do { đó nó được sử dụng cho đối tượng hằng. // Thân phương thức • Ví dụ: đối tượng hằng của lớp TamGiac } • Các lệnh trong thân phương thức hằng không được phép thay đổi giá trị các thuộc tính của đối tượng hằng • Chú ý: Định nghĩa phương thức hằng bên trong hay bên ngoài lớp thì sau (DSTSHT) vẫn phải viết từ khóa const 49 50 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng 2.14. Lớp như là thành viên của lớp khác 2.14. Lớp như là thành viên của lớp khác Các thành viên dữ liệu của lớp thường có kiểu dữ Ví dụ: liệu cơ sở như char, int, float, hoặc kiểu cấu • Xây dựng lớp Nguoi trúc như mảng 1 chiểu, mảng 2 chiều, cấu trúc class Nguoi Thành viên dữ liệu của lớp còn có thể có kiểu lớp { của một lớp đã có trước private: Ví dụ: char ht[30], char nsinh[12]; • Giả sử đã có trước lớp char ma[10]; Nguoi(ma,hoten,ngaysinh). public: • Sử dụng lớp Nguoi xây dựng lớp mới SinhVien(ma,hoten,ngaysinh,toan,ly,hoa, void nhap(); dtb,xloai,hbong) void xem(); • Xây dựng các phương thức: nhap(),tinh(), xem() }; 51 52 Chương 2: Lớp và đối tượng Chương 2: Lớp và đối tượng (tt) 2.15. Hàm, Hàm bạn và lớp bạn 2.14. Lớp như là thành viên của lớp khác Hàm (function) Ví dụ: • Khái niệm này để chỉ những hàm tự do, không • Xây dựng lớp SinhVien có sử dụng lớp Nguoi thuộc LỚP nào, như hàm main(). class SinhVien • Cú pháp khai báo hàm { (DSTSHT - nếu có) private: { Nguoi chung; // Thân hàm float toan,ly,hoa,dtb; } long hbong; char xloai; • Hàm tự do không được phép truy nhập các public: thành viên dữ liệu private của lớp. void nhap(); • Phạm vi nhận biết và sử dụng hàm tự do: Từ vị void tinh(); trí khai báo đến cuối tệp chương trình. void xem(); • Ví dụ: Viết hàm hoán đối giá trị tử/mẫu của đối }; 53 tượng phân số. 54 9
- 3/27/2012 Chương 2: Lớp và đối tượng (tt) Chương 2: Lớp và đối tượng (tt) 2.15. Hàm, Hàm bạn và lớp bạn 2.15. Hàm, Hàm bạn và lớp bạn Hàm bạn của lớp (friend function) Hàm bạn của lớp (friend function) • Cũng là hàm tự do nhưng được phép truy các • Tính chất của hàm bạn thành viên dữ liệu private của lớp Hàm bạn không phải là hàm thành viên của lớp • Cú pháp khai báo hàm bạn của lớp Việc truy nhập tới hàm bạn được thực hiện như friend (DSTSHT - nếu có) hàm tự do { Trong thân hàm bạn của một lớp được phép // Thân hàm truy nhập tới các thuộc tính của đối tượng } thuộc lớp này. Đây là sự khác nhau duy nhất • Chú ý: Từ khóa friend chỉ viết một lần ở nơi giữa hàm bạn và hàm tự do khai báo hàm bạn. Một hàm có thể là hàm bạn của nhiều lớp. Lúc • Ví dụ: Xây dựng hàm bạn của lớp PhanSo, hoán đó nó có quyền truy nhập tới tất cả các thuộc đổi giá trị tử/mẫu của đối tượng phân số. tính riêng của các đối tượng của các lớp này. 55 56 Chương 2: Lớp và đối tượng (tt) Chương 2: Lớp và đối tượng (tt) 2.15. Hàm, Hàm bạn và lớp bạn Hàm bạn của lớp (friend function) 2.15. Hàm, Hàm bạn và lớp bạn • Ví dụ: Xây dựng hàm f là bạn của lớp A,B,C; Lớp bạn (friend class) class A; class B; class C; // Khai báo trước 3 lớp • Nếu lớp B là bạn của lớp A thì mọi phương thức class A của lớp B được phép truy nhập vào thành viên { dữ liệu riêng của lớp A. friend void f(); • Nếu hiện tượng trên xảy ra theo 2 chiều thì ta }; nói lớp A và B là các lớp bạn của nhau class B • Xây dựng các lớp bạn của nhau { // Khai báo trước các lớp A,B,C friend void f(); class A; }; class B; class C class C; { friend void f(); }; 57 58 Chương 2: Lớp và đối tượng (tt) Chương 2: Lớp và đối tượng (tt) 2.15. Hàm, Hàm bạn và lớp bạn 2.16. Biến con trỏ this • Xây dựng các lớp bạn của nhau Biến con trỏ, trỏ tới đối tượng // Định nghĩa các lớp bạn • Khai báo biến con trỏ đối tượng class A * ; { Ví dụ: chương trình thao tác friend class B; đồng thời trên 2 lớp ma trận và Ví dụ: friend class C; vector SinhVien sv1; // Khai báo biến đối tượng }; SinhVien *sv2; // Khai báo biến con trỏ đối tượng class B • Truy nhập các thành viên lớp thông qua biến { con trỏ đối tượng friend class A; friend class C; Cú pháp: }; tên biến trỏ đối tượng->tên thành viên; class C • Ví dụ { friend class A; friend class B; }; 59 60 10
- 3/27/2012 Chương 2: Lớp và đối tượng (tt) Chương 2: Lớp và đối tượng (tt) 2.16. Biến con trỏ this 2.17. Các đối tượng được cấp phát bộ nhớ Biến con trỏ this động • Trong phương thức của lớp luôn có một tham Các thành viên dữ liệu của lớp có thể là biến số hình thức ẩn có tên mặc định là this tĩnh hoặc biến động. • this là tham số hình thức đầu tiên trong Biến tĩnh DSTSHT của phương thức. • Là biến có tên cụ thể • Tham số thực sự truyền giá trị cho this trong lời • Có kiểu: char, int, long, float, double, unsigned gọi phương thức là đối tượng thực hiện lời gọi char, unsigned int, con trỏ. phương thức. Biến động • Truy nhập vào các thành viên của đối tượng • Là biến không có tên được this trỏ tới. Dùng cú pháp: • Được sử dụng thông qua biến có kiểu con trỏ. this->tên thành viên của đối tượng; • Biến động phải được cấp phát bộ nhớ trước khi • Chú ý: Tên thành viên của đối tượng có thể là sử dụng. thuộc tính hoặc phương thức. • Biến động có thể xóa đi khi không cần sử dụng • Ví dụ 61 62 Chương 2: Lớp và đối tượng (tt) Chương 2: Lớp và đối tượng (tt) 2.17. Các đối tượng được cấp phát bộ nhớ 2.18. Các thành viên tĩnh của lớp động Thuộc tính tĩnh Đối tượng động • Khai báo • là đối tượng có các thuộc tính là biến động static ; (thuộc tính động). • Khởi tạo giá trị Cấp phát bộ nhớ cho đối tượng động Thuộc tính tĩnh trước khi sử dụng bắt buộc phải • Đối tượng động cần được cấp phát bộ nhớ cho được khởi tạo giá trị ban đầu các thuộc tính động trước khi sử dụng bằng Cú pháp khởi tạo giá trị phương thức khởi tạo. :: =giá trị; Hủy bỏ đối tượng động • Ví dụ: Cộng hai đối tượng vector n chiều • Đối tượng động khi không cần sử dụng có thể • Chú ý: Các thuộc tính tĩnh được sử dụng chung xóa đi bằng phương thức hủy bỏ. cho tất cả các đối tượng thuộc lớp. Không là Ví dụ: Sử dụng đối tượng động của riêng từng đối tượng. 63 64 Chương 2: Lớp và đối tượng (tt) Chương 2: Lớp và đối tượng (tt) 2.18. Các thành viên tĩnh của lớp 2.18. Các thành viên tĩnh của lớp Phương thức tĩnh Phương thức tĩnh • Khai báo • Chú ý: static (DSTSHT - nếu có ) Phương thức tĩnh không có biến trỏ this { Phương thức tĩnh tồn tại độc lập với đối tượng // Thân phương thức của lớp. } • Gọi phương thức tĩnh: có 2 cách Cách 1: Gọi qua đối tượng của lớp như phương thức không tĩnh. Cú pháp: . Cách 2: Gọi qua tên lớp. Cú pháp :: • Ví dụ: Bổ sung thêm phương thức tĩnh, nhập n cho Cộng hai vector n chiều. 65 66 11