This trong class C++ | Laptrinhcanban.com

This trong class C++

Cùm tìm hiểu về this trong class c++. Bạn sẽ biết khái niệm this trong class c++ là gì, cách viết this trong class, cũng như trả lời được câu hỏi có thực sự cần this trong class C++ không sau bài học này.

This trong class c++ là gì

This trong class c++ hay còn gọi là con trỏ this trong class c++ là một con trỏ đặc biệt ẩn dấu bên trong hàm thành viên của class, có tác dụng trỏ đến đối tượng đã gọi đến hàm thành viên đó.

Điều đó có nghĩa, khi một đối tượng gọi tới một hàm thành viên nào đó trong class thì con trỏ this sẽ trỏ đến vị trí của đối tượng đó để xác định đối tượng đang trong phiên làm việc, qua đó nó có thể giúp đối tượng đó có thể tiếp tục truy cập và xử lý các biến thành viên có trong class.

Nói một cách ví von thì con trỏ this trong class c++ giống như là một người lễ tân, nó sẽ xác định vị khách (đối tượng) đã gọi phòng (goị hàm thành viên) là ai, vị trí của khách đó ( vị trí đối tượng trong bộ nhớ) đang ngồi ở chỗ nào, và sẽ giúp vị khách đó có thể thưởng thức một tách trà nóng (biến thành viên) của khách sạn (class).

This trong class c++ là gì

Mặc dù con trỏ this được tự động khai báo và cống hiến thầm lặng cho chúng ta sau khi tạo hàm thành viên trong class, nhưng thông thường thì nó sẽ được ẩn đi, do vậy chúng ta không mấy để ý tới sự tồn tại của nó. Tuy nhiên nếu viết rõ ra con trỏ this trong khai báo hàm thì sẽ giúp chúng ta hình dung rõ hơn về các xử lý trong class C++.

Cách viết this trong class c++

Ví dụ chúng ta có một class đơn giản giúp tính tổng 2 số như sau:

#include <iostream>
using namespace std;

class MyClass
{
private:
int x;
int y;
public:
MyClass(int tmpx, int tmpy)
{
x = tmpx;
y = tmpy;
};
void sum() { cout << x + y ;}

};

int main() {
MyClass dc(2,3);

dc.sum(); //5
return 0;
}

Trong class trên, hàm khởi tạo MyClass sẽ nhận 2 giá trị truyền vào khi chúng ta tạo đối tượng (instance) từ class. Sau đó 2 giá trị này sẽ được dùng để khởi tạo giá trị cho 2 biến thành viên tương ứng là x và y. Cuối cùng thì dùng 2 biến này để tính tổng bên trong hàm sum() và in ra kết quả ra màn hình.

Với chương trình trên, thực tế là con trỏ this đã bị giấu đi rồi, mặc dù nó vốn tồn tại. Và chúng ta sẽ viết rõ con trỏ this trong class C++ thông qua từ khoá this kèm với toán tử mũi tên -> vào các vị trí nó tồn tại như sau:

#include <iostream>
using namespace std;

class MyClass
{
private:
int x;
int y;
public:
MyClass(int tmpx, int tmpy)
{
this->x = tmpx;
this->y = tmpy;
};
void sum() { cout << this->x + this->y ;}
};

int main() {
MyClass dc(2,3);

dc.sum(); //3
return 0;
}

Cả 2 cách viết trên đều đưa ra kết quả giống nhau. Tuy nhiên hãy cùng so sánh sự khác biệt giữa 2 cách viết như sau:

Cách viết this trong class c++

Có thể thấy, do con trỏ this sẽ trỏ tới đối tượng đang gọi hàm, trong trường hợp này là instance dc, nên con trỏ this hiện sẽ đại diện cho instance dc.

Do vậy, bằng cách ghi this -> xthis -> y , chúng ta có thể hiểu được instance dc đang thực hiện tham chiếu tới các biến thành viên trong class là x và y, qua đó có thể hiểu rõ hơn các xử lý trong class hiện đang phục vụ cho đối tượng nào trong chương trình.

Có thực sự cần this trong class C++ không?

Qua ví dụ ở trên, chúng ta có thể hiểu this đơn giản là một con trỏ giúp xác định đối tượng nào đang gọi hàm thành viên trong class, và chúng ta có thể lược bỏ việc viết nó trong chương trình.

Vậy thì this trong class C++ có thật sự cần thiết không?

Câu trả lời là có, trong các trường hợp chúng ta muốn phân biệt rõ giữa các biến toàn cục (glocal) và các biến thành viên chỉ sử dụng bên trong class.

Đơn giản là vì đằng trước biến thành viên chúng ta có thể ghi this đằng trước tên biến, còn đối với biến toàn cục (glocal) thì không.

Ngoài ra, bằng cách sử dụng this trong class C++, chúng ta có thể sử dụng chung tên biến giữa một biến toàn cục và một biến thành viên, miễn là đằng trước biến thành viên đó chúng ta có ghi this, để phân biệt với biến toàn cục cùng tên với nó.

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về this trong class C++ rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C++ trong các bài học tiếp theo.

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.