Tóm Tắt
1. Con trỏ this trong C++
This
là một con trỏ đặc biệt dùng để trỏ đến địa chỉ của đối tượng hiện tại. Như vậy để truy cập đến các thuộc tính, phương thức của đối tượng hiện tại thì ta sẽ sử dụng con trỏ this
. Hãy xem ví dụ dưới đây.
Ví dụ
1 Bạn đang đọc: Con trỏ this trong C++ – Sửa Máy Nhanh 23456789101112131415161718 |
|
Trong ví dụ này mình đã tạo ra ba thuộc tính để lưu trữ thông tin của một nhân viên đó là: manv
, ten
, tuoi
. Ngoài ra mình có tạo thêm phương thức setData()
dùng để gán dữ liệu cho sinh viên, và showData()
dùng để hiển thị dữ liệu.
Trong phương thức setData()
mình đã sử dụng từ khóa this->ten_thuoc_tinh
để thực hiện phép gán dữ liệu cho các thuộc tính, còn ở phương thức showData()
mình cũng sử dụng cú pháp tương tự để hiển thị dữ liệu của các thuộc tính. Như vậy công dụng của từ khóa this chính là một con trỏ và trỏ đến địa chỉ của đối tượng hiện tại.
Câu hỏi đặt ra là đối tượng hiện tại tại là gì? Để hiểu rõ hơn thì hãy xem đoạn code sử dụng class trên như sau:
Ví dụ
123456789101112 |
|
Trong ví dụ này mình đã tạo ra hai đối tượng sinh viên đó là n1
và n2
, và con trỏ this của n1
sẽ trỏ đến chính đối tượng n1
, con trỏ this của n2
sẽ trỏ đến chính đối tượng n2
, đây ta gọi là đối tượng hiện tại.
Lưu ý: Trong các phương thức bình thường (không phải hàm khởi tạo) nếu bạn sử dụng tên của biến thì sẽ có hai trường hợp xảy ra.
- Nếu biến đó không tôn tại trong phương thức mà nó lại trùng với tên thuộc tính thì mặc nhiên nó sẽ hiểu đó là thuộc tính.
- Nếu biến đó có khai báo trong phương thức thì ta sẽ hiểu đó là biến bình thường, không phải là thuộc tính.
2. Một ví dụ khác về con trỏ this
Bạn hãy xem ví dụ dưới đây, đây là một ví dụ mình viết lại ở phần 1 và có một chút ít đổi khác .
Ví dụ
1234567891011121314151617181920212223242526272829 |
|
Và tác dụng sau khi thực thi chương trình trên như sau :
Đây là một kết quả mà chúng ta không hề mong đợi đúng không? Mình mong muốn in ra thông tin của sinh viên nhưng có vẻ như nó in ra một dãy số nào đó, có thể là một địa chỉ trong một ô nhớ nào đó.
Các bạn mới học chắc vướng mắc tại sao chương trình lại ra hiệu quả như vậy ? Mình xin được lý giải hiệu quả của chương trình trên như sau :
- Khi chúng ta khai báo tên của tham số hàm trùng tên với dữ liệu thành viên của lớp, thì bên trong hàm xây dựng chương trình hiểu là biến tham số chứ không phải dữ liệu thành viên của lớp
- Như vậy ở ví dụ trên, bên trong thân hàm xây dựng ta gán
msnv = msnv
,ten = ten
,tuoi = tuoi
, thì chương trình hiểumssv
,ten
,tuoi
chính là biến truyền vào từ hàm xây dựng, chính vì vậy nó không cập nhật vào các thuộc tính của đối tượng. - Khi các dữ liệu thành viên như msnv, ten, tuoi không được khỏi tạo giá trị nó sẽ có giá trị tự động cho chương trình tạo ra mà chúng ta không hề biết trước
Con trỏ this
trong C++ giúp chúng ta giải quyết được vấn về trên. Chúng ta sẽ dùng con trỏ this
trong ví dụ trên như sau:
Ví dụ
1234567891011121314151617181920212223242526272829 |
|
Và hiệu quả sau khi thực thi chương trình trên như sau :
Kết quả trên đúng như tác dụng của tất cả chúng ta mong đợi rồi nhé. 🙂
Như vậy con trỏ this
trong C++ dùng để tham chiếu đến thể hiện hiện tại của lớp. Con trỏ this
có thể sử dụng trong 3 cách như sau:
- Nó có thể được sử dụng để truyền đối tượng hiện tại làm tham số cho phương thức khác.
- Nó có thể được sử dụng để tham chiếu đến thể hiện hiện tại của lớp (như ở ví dụ trên).
- Nó có thể được sử dụng để khai báo các chỉ mục.
3. Thêm một vài ví dụ với this
Bây giờ ta sẽ thực hành thực tế thêm một vài ví dụ nữa để những bạn hiểu được con trỏ this, nó sẽ rất quan trọng khi những bạn thao tác với đối tượng người tiêu dùng trong OOP .
Ví dụ 1: Chúng ta sẽ cùng lấy một ví dụ đơn giản khác về sử dụng con trỏ this
trong trường hợp tên của tham số trùng tên với dữ liệu thành viên như sau:
Ví dụ
1234567891011121314151617181920212223242526 |
|
Và hiệu quả sau khi thực thi chương trình trên như sau :
Ví dụ 2: Chúng ta cùng xem xét ví dụ sử dụng con trỏ để trả về tham chiếu cho đối tượng gọi
Ví dụ
12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
|
Và hiệu quả sau khi thực thi chương trình trên như sau :
4. Kết luận
Như vậy chúng ta đã tìm hiểu xong con trỏ this
trong C++ là gì rồi. Ở bài này các bạn chỉ cần nhớ đơn giản đó là con trỏ this
tham chiếu đến đối tượng hiện tại của lớp.
Nguồn : https://freetuts.net
Source: https://final-blade.com
Category: Kiến thức Internet