Con trỏ *this có ý nghĩa gì?

c++

(Nhật Tình Nè) #1

Mình có câu hỏi về cái *this. Cái *this này mình dùng để làm gì và khi nào vậy mọi người? Cám ơn mọi người trước.


Con trỏ this trong class
[Video] C++ Bài 17 - Hàm dựng có tham số
(Phạm Hoàng Tuấn) #2

Nói vậy cho dễ hiểu nhé bạn, trong 1 hàm con trỏ this giữ địa chỉ của chính đối tượng đang gọi tới nó.

Ví dụ trong hàm A(). mình có con trỏ this, thì nếu mình dùng B.A() thì this chính là đối tượng B


(Nhật Tình Nè) #3

cám ơn anh nhé…


(Lê Trần Đạt) #4

Nếu nói về con trỏ this thì @tuancoi2506 nói hợp lý rồi, @butobino15 có thể xem thêm bài con trỏ this ở đây

Tuy nhiên *this lại phức tạp hơn một tí. Cũng giống như các con trỏ khác, *this lấy giá trị của vùng nhớ mà nó đang trỏ tới.

Ta đã biết this trỏ đến đối tượng của nó, nếu @butobino15 thắc mắc về this thì nên xem video trên, thế nên *this lấy giá trị của chính nó.

Vậy *this dùng để làm gì? Việc return *this trở về bên ngoài class tương đương với việc trả về một bản copy của class đó.

Nếu @butobino15 thắc mắc nhiều hơn, thì đọc qua topic này

Nếu @butobino15 đọc qua nhưng không hiểu, vì vấn đề tiếng Anh hay các vấn đề khác. Cứ reply ở đây, Đạt sẽ giải thích rõ hơn.


(Minh Hoàng) #5

dereferenced pointer là gì anh?


(Lê Trần Đạt) #6

Ví dụ đơn giản hơn giải thích:

int a = 3;
int *pa = &a;

printf("*pa = %d\n", *pa); // *pa = 3

*pa = 4;
printf("*pa = %d\n", *pa); // *pa = 4

Output:

*pa = 3
*pa = 4


(Sáng Béo) #7

cái này output a=4 hay a=3 hả a


(Lê Trần Đạt) #8

@htwap bây giờ a bằng 4, em có thể thử với chương trình anh viết hoàn thiện ở dưới

#include <stdio.h>

int main()
{
    int a = 3;
    int *pa = &a;

    printf("*pa = %d\n", *pa); // *pa = 3

    *pa = 4;
    printf("*pa = %d\n", *pa); // *pa = 4

    printf("a = %d\n", a);

    return 0;
}

Output

*pa = 3
*pa = 4
a = 4


(Sáng Béo) #9

à à, e hiểu rồi. cái *pa chính là cái a, còn cái pa chính là địa chỉ của a.


(Lê Trần Đạt) #10

Và đó cũng là cái mà @Rok_Hoang hỏi ở trên


(Sáng Béo) #11

e nghĩ là a gõ thừa dấu * rồi ạ


(Sáng Béo) #12

dereferenced pointer là gì vậy a?


(Lê Trần Đạt) #13

Tức là dấu * đặt phía trước pointer đó. Chữ này tách ra làm 2 phần dereferenced, có thể hiểu là truy ngược trở lại cái giá trị mà con trỏ này đang trỏ tới


(Sáng Béo) #14

vâng, e hiểu rồi. thế có thể dịch là “ngược trở lại tham chiếu của con trỏ” ạ?


(Lê Trần Đạt) #15

Có thể hiểu như vậy, mọi thay đổi trên *pa sẽ áp dụng ngay lên a


(Sáng Béo) #16

vâng, lại phải thêm 1 comment. :scream:


(Minh Hoàng) #17

:smiley: à, cảm ơn anh. Em sử dụng cái này nhiều mà không biết tên của phương thức này.


(Thịnh Lê) #18

link http://portal.daynhauhoc.com/series/c-bai-73-this-pointer/41 ko vô được anh Đạt ơi


(Lê Trần Đạt) #19

(Thịnh Lê) #20

cảm ơn anh :grinning::grinning:


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?