Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 30 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
30
Dung lượng
473,53 KB
Nội dung
Chương 04 Lớp đối tượng lớp I Mô tả lớp (khai báo lớp) II Tạo tương tác với đối tượng III Các thành viên tĩnh lớp (static member) Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 I Mô tả lớp (khai báo lớp) Cú pháp mô tả lớp (khai báo lớp) Từ khóa public, private, protected Khai báo liệu lớp Khai báo định nghĩa hàm thành viên lớp Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 Cú pháp mô tả lớp (định nghĩa lớp) class Tên_lớp { private: public: }; Dấu chấm phẩy Tên_lớp đặt theo quy tắc đặt tên Mô tả lớp đặt trước hàm main() để file header Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 Từ khóa public, private, protected Khi định nghĩa lớp ta quy định quyền truy nhập thành phần lớp từ khóa public, private protected Theo sau từ khóa dấu chấm Phần lớp nằm sau từ khóa private: truy nhập từ bên lớp, tức có thành viên lớp có quyền truy nhập Trong C++, khơng sử dụng từ khóa private mặc định private Phần lớp nằm sau từ khóa public: truy nhập từ đâu chương trình Ngơ Cơng Thắng - Bài giảng LTHĐT - Chương 04 Từ khóa public, private, protected (tiếp) Phần lớp nằm sau từ khóa protected: truy nhập từ bên lớp từ lớp dẫn xuất Thông thường người ta thường để tất liệu private để che giấu liệu, tránh thay đổi vơ tình làm hỏng liệu Tuy nhiên, hàm thành viên nên để public cho phần khác chương trình gọi chúng để bảo đối tượng làm Ngơ Cơng Thắng - Bài giảng LTHĐT - Chương 04 Khai báo liệu lớp Khai báo liệu lớp khai báo biến để lưu trữ thuộc tính đối tượng Việc khai báo biến lớp không tạo nhớ Nó đơn giản báo cho trình biên dịch biết tên biến kích thước nhớ cần đối tượng tạo Khi khai báo biến lớp ta không khởi tạo giá trị cho biến chưa có nhớ Ví dụ: private: int x,y; Ngơ Cơng Thắng - Bài giảng LTHĐT - Chương 04 Khai báo định nghĩa hàm thành viên lớp Các hàm thành viên lớp khai báo định nghĩa giống hàm thơng thường Ta định nghĩa hàm thành viên mô tả lớp không cần khai báo hàm Thơng thường với hàm thành viên nhỏ (chỉ có vài dịng lệnh) người ta định nghĩa mơ tả lớp Bởi ta định nghĩa hàm thành viên mô tả lớp mặc định hàm inline Hàm inline khác hàm hàm bình thường chỗ: dịch chương trình, trình biên dịch khơng để mã hàm vùng nhớ riêng mà chèn vào vị trí lời gọi hàm Bởi vậy, để hàm inline lớn làm tăng kích thước chương trình Ngơ Cơng Thắng - Bài giảng LTHĐT - Chương 04 Khai báo định nghĩa hàm thành viên lớp (tiếp) Nếu định nghĩa hàm thành viên bên ngồi mơ tả lớp bên mơ tả lớp phải có khai báo hàm thành viên Các hàm thành viên định nghĩa bên lớp trước tên hàm phải có tên lớp, tên hàm tên lớp cách hai dấu hai chấm liền (::) Hai dấu hai chấm tốn tử quy định phạm vi (scope resolution operator) Ngơ Công Thắng - Bài giảng LTHĐT - Chương 04 Khai báo định nghĩa hàm thành viên lớp (tiếp) Cú pháp định nghĩa hàm thành viên bên ngồi mơ tả lớp sau: class Ten_lop { private: public: Kieu Ten_ham(); }; Kieu Ten_lop::Ten_ham() { //Cac lenh cua ham } Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 Ví dụ lớp Lớp đối tượng thời gian lưu trữ phút class airtime { private: int hours; //Tu den 23 int minutes; //Tu den 59 public: void set(); //Khai bao ham vien void display() //Ham inline { coutThành_viên Ví dụ: p->display(); Cách thứ hai gọn cách Với trỏ trỏ tới đối tượng người ta hay dùng cách thứ hai Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 17 Lệnh gán đối tượng Với biến kiểu ta gán giá trị biến cho biến kiểu Vậy gán giá trị đối tượng cho đối tượng khơng? Câu trả lời có, C++ coi đối tượng biến Nhưng đối tượng bao gồm liệu hàm thành viên, gán đối tượng cho đối tượng khác trình biên dịch làm nào? Trình biên dịch copy mục liệu, khơng copy hàm thành viên Bởi tất đối tượng lớp có hàm thành viên giống Trong nhớ có hàm thành viên, đối tượng sử dụng chung hàm thành viên Các hàm thành viên tác động liệu đối tượng gọi Ngơ Cơng Thắng - Bài giảng LTHĐT - Chương 04 18 Lệnh gán đối tượng (tiếp) Đối tượng Đối tượng Đối tượng Dữ liệu Dữ liệu Dữ liệu Dữ liệu Dữ liệu Dữ liệu Hàm Hàm Đối tượng lưu trữ nhớ Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 19 Lệnh gán đối tượng (tiếp) Ví dụ: giả sử t1, t2 hai đối tượng thời gian airtime, sau lấy giá trị phút cho t1 ta gán t1 cho t2 airtime t1, t2; vdp2c23.cpp t1.set(); t1.display(); t2 = t1; t2.display(); Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 20 Truy nhập liệu đối tượng lớp Các hàm thành viên truy nhập trực tiếp liệu private đối tượng lớp Bài tốn: Tính tổng hai số phức BTVN: Tính tổng hai phân số Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 21 III Các thành viên tĩnh lớp (static member) Dữ liệu thành viên tĩnh Hàm thành viên tĩnh Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 22 Dữ liệu thành viên tĩnh Dữ liệu riêng gắn với đối tượng cụ thể Chúng tồn đối tượng tạo đối tượng bị hủy Nhưng cần biến mà dùng cho lớp đối tượng cho đối tượng cụ thể làm nào? Có thể nghĩ tới biến ngồi, biến ngồi lại khơng gắn với lớp cụ thể có nhiều vấn đề không tốt Dữ liệu thành viên tĩnh giải vấn đề Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 23 Dữ liệu thành viên tĩnh (tiếp) Đối tượng Đối tượng Đối tượng Dữ liệu riêng Dữ liệu riêng Dữ liệu riêng Dữ liệu Dữ liệu Dữ liệu Dữ liệu Dữ liệu Dữ liệu Dữ liệu chung Dữ liệu Dữ liệu Dữ liệu thực thể liệu tĩnh Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 24 Dữ liệu thành viên tĩnh (tiếp) Để có liệu thành viên tĩnh ta phải dùng hai lệnh: lệnh khai báo biến nằm mô tả lớp, lệnh định nghĩa biến nằm ngồi mơ tả lớp Ví dụ: class aclass { private: static int a; //Khai bao vien tinh }; int aclass::a=100; //Dinh nghia, khoi tao = 100 Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 25 Dữ liệu thành viên tĩnh (tiếp) Dữ liệu thành viên tĩnh khởi tạo định nghĩa Nếu ta khơng khởi tạo chúng tự động khởi tạo Ta truy nhập liệu thành viên tĩnh từ hàm thành viên thông thường Tuy nhiên, người ta thường dùng loại hàm đặc biệt dành cho lớp để truy nhập liệu thành viên tĩnh Hàm gọi hàm tĩnh (static function) Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 26 Hàm thành viên tĩnh Việc khai báo định nghĩa hàm thành viên tĩnh giống hàm thành viên thông thường khác dùng thêm từ khóa static Lời gọi hàm thành viên tĩnh khơng giống lời gọi hàm thành viên thông thường Lời gọi hàm thành viên tĩnh không gắn với đối tượng mà gắn với tên lớp toán tử quy định phạm vi: tên_lớp::tên_hàm_tĩnh Hàm thành viên tĩnh truy nhập liệu tĩnh, chúng khơng biết đối tượng lớp Thậm chí ta gọi hàm thành viên tĩnh trước tạo đối tượng lớp Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 27 Hàm thành viên tĩnh (tiếp) class aclass { private: public: static void stafunc(); //Khai bao }; void main() { aclass::stafunc(); //Goi ham vien tinh } void aclass::stafunc() //Dinh nghia { //Ham tinh chi co the truy nhap du lieu vien tinh } Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 28 Bài tập chương Bài Viết chương trình nhập vào thời gian có phút Tính đưa hình thời gian sau n phút nhập vào từ bàn phím Bài Viết chương trình nhập vào n số phức Đưa số phức nhập hình Yêu cầu chương trình phải tạo đối tượng động Bài Nhập thông tin số cán Mỗi cán có thơng tin mã cán bộ, tên Mã cán số thứ tự cán bộ, lấy tự động Đưa hình thơng tin cán tổng số cán nhập Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 29 Bài tập chương Bài Viết chương trình nhập vào danh sách sinh viên khơng muốn nhập thơi, sinh viên có thơng tin mã sinh viên, tên điểm tbc Mã SV số nguyên lấy tự động có giá trị từ 11 trở Đưa hình số lượng danh sách sinh viên nhập Yêu cầu chương trình có sử dụng biến chung hàm chung, sử dụng đối tượng động Ngô Công Thắng - Bài giảng LTHĐT - Chương 04 30