30/09/2018, 16:28

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

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.

Phạm Hoàng Tuấn viết 18:32 ngày 30/09/2018

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è viết 18:34 ngày 30/09/2018

cám ơn anh nhé…

Nguyễn Minh Dũng viết 18:42 ngày 30/09/2018

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

Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây : Thông tin về khóa học xem tại đây : -Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại..... Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học …

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

stackoverflow.com

*this vs this in C++

c++, this
asked by anon235370 on 02:36PM - 01 May 10

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 viết 18:30 ngày 30/09/2018

dereferenced pointer là gì anh?

Nguyễn Minh Dũng viết 18:31 ngày 30/09/2018

dereferenced pointer

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 viết 18:29 ngày 30/09/2018

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

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

Nguyễn Minh Dũng viết 18:35 ngày 30/09/2018

@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 viết 18:44 ngày 30/09/2018

à à, 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.

Nguyễn Minh Dũng viết 18:37 ngày 30/09/2018

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

dereferenced pointer là gì

Sáng Béo viết 18:29 ngày 30/09/2018

con trỏ *this giữ địa chỉ của chính đối tượng đang gọi tới nó

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

Sáng Béo viết 18:31 ngày 30/09/2018

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

dereferenced pointer là gì vậy a?

Nguyễn Minh Dũng viết 18:32 ngày 30/09/2018

dereferenced pointer là gì vậy a?

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 viết 18:34 ngày 30/09/2018

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ỏ” ạ?

Nguyễn Minh Dũng viết 18:44 ngày 30/09/2018

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ỏ” ạ?

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 viết 18:42 ngày 30/09/2018

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

Minh Hoàng viết 18:30 ngày 30/09/2018

à, 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ê viết 18:34 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:44 ngày 30/09/2018
Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây : Thông tin về khóa học xem tại đây : -Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại..... Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học …
Thịnh Lê viết 18:33 ngày 30/09/2018

cảm ơn anh

Bài liên quan
0