1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Ngôn ngữ lập trình C Chương 11: Đối tượng và lớp

30 388 0

Đ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

Thông tin cơ bản

Tiêu đề Chương 11: Đối tượng và lớp
Trường học Trường Đại học Công nghệ Thông tin - Đại học Quốc gia Thành phố Hồ Chí Minh
Chuyên ngành Ngôn Ngữ Lập Trình
Thể loại Bài giảng
Năm xuất bản 2023
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 30
Dung lượng 124,44 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Ngôn ngữ lập trình C Chương 11: Đối tượng và lớp trình bày về đối tượng, lớp, con trẻ this, hàm thiết lập, hàm hủy bỏ, hàm thiết lập sao chép, các thành phần tĩnh, hàm bạn và lớp bạn...cùng tìm hiểu bài giảng để hiểu sâu hơn về đối tượng trong lập trình C.

Trang 2

• <định nghĩa các hàm thành phần chưa được định nghĩa bên trong khai báo lớp>

 Các thành phần của lớp có thể là thành phần dữ liệu (thuộc tính) hoặc hàm thành phần (phương thức).

Trang 3

 Hàm thành phần được khai báo giống như khai báo hàm trong C Có hai cách định nghĩa một hàm thành phần: định nghĩa trong lớp và ngoài lớp.

 Tất cả các thành phần được liệt kê sau từ khóa private hoặc protected chỉ

được truy nhập bởi các thành phần bên trong lớp đó Còn tất cả các thành

phần được liệt kê sau từ khóa public có thể được truy nhập trong bất kỳ

Trang 4

• //Định nghĩa các hàm thành phần bên ngoài lớp

• Diem a; //Khai báo một đối tượng a thuộc lớp Diem

• a.Nhap(); //Đối tượng a thực hiện lời gọi hàm thành phần Nhap()

• }

Chú ý: Lời gọi hàm thành phần luôn có một và chỉ một tham số ngầm định

là đối tượng thực hiện lời gọi hàm Như vậy các thành phần dữ liệu viết trong các hàm thành phần được hiểu là thuộc đối tượng dùng làm tham số ngầm định trong lời gọi hàm

Trang 5

C++ sử dụng con trỏ đặc biệt this trong các hàm thành phần Con trỏ này

luôn trỏ tới đối tượng dùng làm tham số ngầm định trong lời gọi hàm thành phần

Ví dụ 2: Các hàm thành phần Nhap() và Xuat() có thể viết theo cách khác

như sau

• void Diem::Nhap()

• {

• cout <<“Nhap toa do:”;

• cin >> this->x >> this->y;

Trang 6

 Khi người sử dụng không khai báo tường minh bất kỳ một hàm thiết lập nào cho lớp thì trình biên dịch tự động phát sinh cho lớp một hàm thiết lập ngầm định không tham số, hàm này không thực hiện bất cứ nhiệm vụ nào ngoài việc “lấp chỗ trống”.

Trang 7

• Diem(); //Khai báo hàm thiết lập không đối số

• Diem(int xx); //Khai báo hàm thiết lập một đối số

• Diem(int xx, int yy); //Khai báo hàm thiết lập hai đối số

Trang 9

• Diem::Diem(int xx, int yy)

• { cout << “Goi ham thiet lap hai doi so\n”;

Trang 11

• void fct(); //Nguyên mẫu hàm của một hàm tự do

• Test(int nn); //Khai báo hàm thiết lập một đối số

• ~Test(); //Khai báo hàm hủy bỏ

Trang 13

• Trên thực tế với các lớp không có thành phần dữ liệu động chỉ cần sử dụng hàm thiết lập và hủy bỏ ngầm định là đủ Hàm thiết lập và hủy bỏ do người lập trình tạo ra rất cần thiết khi các lớp có chứa thành phần dữ liệu động Khi tạo đối tượng hàm thiết lập xin cấp phát một bộ nhớ động, do đó hàm hủy bỏ sẽ giải phóng vùng nhớ động đã được cấp phát trước đó.

• Vector(); Vector(int nn); ~vector();

• void Nhap(); void Xuat();

• };

Trang 14

• //Định nghĩa các hàm thành phần

• Vector::vector()

• { cout << “Goi ham thiet lap khong doi\n”;

• cout << “Nhap so chieu:”; cin >> n;

Trang 16

Chú ý: Nếu chỉ sử dụng hàm thiết lập mặc định thì đối tượng a được tạo ra

bởi các lệnh khai báo sẽ chưa có bộ nhớ để chứa các tọa độ Như vậy đối tượng chưa hoàn chỉnh và chưa dùng được

Trang 17

 Hàm thiết lập được gọi khi khai báo và khởi tạo nội dung một đối tượng thông qua một đối tượng khác gọi là hàm thiết lập sao chép Nhiệm vụ của hàm thiết lập sao chép là tạo ra một đối tượng giống hệt một đối tượng đã

có trước đó

Dạng khai bao hàm thiết lập sao chép:

<Tên lớp>(<Tên lớp> & <Tên đối số>);

 Ngoài tình huống trên đây, còn có hai tình huống cần dùng hàm thiết lập sao chép: truyền đối tượng cho hàm bằng tham trị hoặc hàm trả về một đối tượng giống hệt một đối tượng cùng lớp đã có trước đó

 Giống như hàm thiết lập ngầm định, nếu không được khai báo tường minh,

sẽ có một hàm thiết lập sao chép ngầm định do chương trình dịch cung cấp Hàm này chỉ thực hiện thao tác tối thiểu: sao chép giá trị của các thành

phần dữ liệu trong đối tượng nguồn cho các thành phần dữ liệu tương ứng trong đối tượng đích

Trang 18

• Diem(Diem &u); //Khai báo hàm thiết lập sao chép

• float KC(Diem u);

Trang 19

• float d = a.KC(c); //Gọi hàm thiết lập sao chép

• cout << “khoang cach tu a toi c la “ << d << “\n”;

• }

Chú ý: Hàm thiết lập sao chép được khai báo tường minh trong ví dụ trên

có chức năng tương tự như hàm thiết lập sao chép mặc định Nói chung, với các lớp không khai báo thành phần dữ liệu động thì chỉ cần sử dụng hàm thiết lập sao chép ngầm định là đủ Tuy nhiên với những lớp có chứa thành phần dữ liệu động không được dùng hàm thiết lập sao chép ngầm định mà phải gọi hàm thiết lập sao chép tường minh

Trang 20

• Vector(Vector &u); //Hàm thiết lập sao chép

• int GetN() { return n;}

• float Nhan(Vector u); //Tích vô hướng hai vector

• p = new int [n]; //Cấp phát vnđ bằng kích thước có trong đt nguồn

• //Gán nội dung vnđ trong đt nguồn sang đt đích

• for(int i =0; i < n; i++)

• }

Trang 22

Chú ý:

 Việc truyền tham số đối tượng cho hàm bằng giá trị đòi hỏi phải có hàm thiết lập sao chép Ngoài ra nó cũng làm cho chương trình chạy chậm vì phải mất thời gian sao chép một lượng lớn dữ liệu Do đó người ta thường chọn cách truyền tham chiếu

 Cần phân biệt giữa hàm thiếp lập sao chép và phép gán Phép gán thực hiện việc sao chép nội dung từ đối tượng này sang đối tượng khác, do vậy cả hai đối tượng trong phép gán đều đã tồn tại Ngược lại hàm thiết lập thực hiện đồng thời hai nhiệm vụ: tạo đối tượng và thực hiện việc sao chép nội dung

từ một đối tượng đã có sang đối tượng mới tạo ra đó

Trang 23

• Các hàm hay lớp nếu được khai báo là bạn của lớp thì có thể truy nhập tới mọi thành phần private của lớp.

Ví dụ 10: Xây dựng một hàm nhân MaTran với Vector

• class MaTran; //Khai báo trước lớp MaTran

• class Vector

• {

• public:

• //Khai báo hàm tự do Nhan() là bạn của lớp vector

friend Vector Nhan(MaTran u, Vector v);

• //Khai báo hàm tự do Nhan() là bạn của lớp MaTran

friend Vector Nhan(MaTran u, vector v);

• };

Trang 24

• Vector Nhan(Matran u, Vector v); //Khai báo nguyên mẫu

Trang 25

 Một lớp có thành phần dữ liệu là đối tượng lớp khác được gọi là lớp bao

Trang 26

 Khi xây dựng hàm thiết lập của lớp bao, phải sử dụng các hàm thiết lập của lớp thành phần để khởi gán cho các đối tượng thành phần của lớp bao.

• Trong hàm thiết lập ở trên của lớp TamGiac các đối tượng thành phần A,

B, C đều được khởi gán bằng hàm thiết lập hai đối của lớp Diem

Trang 27

 Các thành phần dữ liệu tĩnh của một lớp được dùng chung (chia sẽ) bởi mọi đối tượng thuộc về lớp đó Các thành phần dữ liệu tĩnh được gọi là thành phần dữ liệu lớp.

Ví dụ 11: Đếm số đối tượng được tạo ra

Trang 29

nào của lớp Nó thường được dùng để xử lý chung trên tất cả các đối tượng của lớp, chẳng hạn để hiển thị thông tin liên quan đến các thành phần dữ liệu tĩnh Cú pháp gọi hàm thành phần tĩnh như sau:

<tên lớp>::<tên hàm thành phần>(<các tham số nếu có>);

Ngày đăng: 18/07/2014, 19:54

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w