Ý nghĩa của con trỏ this
trong C/C++ là gì?
Giả sử bạn có lớp Car
,
class Car{
private:
int Size;
public:
void tocDoChay(){cout <<"Toc do chay cua doi tuong: " << this << endl;}
};
Khi sử dụng, có thể bạn khai báo 2 hoặc nhiều đối tượng từ lớp Car
này,
Car honda;
Car suzuki;
Thì chuyện gì sẽ xảy ra?
- Đối tượng
honda
vàsuzuki
sẽ cùng sử dụng chung 1 phương thứctocDoChay()
của lớpCar
. - Đối tượng
honda
vàsuzuki
sẽ có bản copy thuộc tínhSize
cho riêng mình.
Và câu hỏi đặt ra ở đây, nếu nhiều đối tượng cùng sử dụng chung 1 phương thức tocDoChay()
của lớp, vậy làm thế nào để phương thức tocDoChay()
đó lấy đúng thuộc tính Size
của từng đối tượng mà tính toán, con trỏ this
được tạo ra để làm việc này, con trỏ this
có thể hiểu ngầm là 1 tham số ẩn được truyền vào phương thức tocDoChay(this)
với mục đích lưu trữ địa chỉ của đối tượng.
Do đó, nếu bạn gọi phương thức tocDoChay()
của đối tượng honda
và suzuki
và xuất ra con trỏ this
, bạn sẽ thấy nó giữ hai địa chỉ khác nhau tùy vào đối tượng honda
hay suzuki
.
honda.tocDoChay(); // Toc do chay cua doi tuong: 004DFD20
suzuki.tocDoChay(); // Toc do chay cua doi tuong: 004DFD14
Có sự khác biệt nào khi khai báo this -> name = name
và name = name
trong hàm khởi tạo của class
hay không?
Có.
this -> name = name
: Đúng, vì name
của đối tượng cụ thể được gán bằng name
của tham số truyền vào hàm khởi tạo.
name = name
: Sai, vì name
ở đây không biết là name
của đối tượng cụ thể nào.