TIN HỌC ỨNG DỤNG 2 - K11
Bạn hãy đăng ký làm thành viên để có thể xem các thông tin trong lớp và viết bài trong diễn đàn.

Không những thế, sau khi đăng ký bạn sẽ nhận được sự hỗ trợ của diễn đàn nhiều hơn.
TIN HỌC ỨNG DỤNG 2 - K11
Bạn hãy đăng ký làm thành viên để có thể xem các thông tin trong lớp và viết bài trong diễn đàn.

Không những thế, sau khi đăng ký bạn sẽ nhận được sự hỗ trợ của diễn đàn nhiều hơn.
Change background image
TIN HỌC ỨNG DỤNG 2 - K11

Khoa CNTT - ĐH Công nghiệp Hà Nội


Go downMessage [Page 1 of 1]

© FMvi.vn

21/3/2011, 21:05
MinhTuan
MinhTuan

Admin

de hieu thi con tro this chi den chinh doi tuong dang "xet" (thong qua loi goi cac ham thanh vien cua no)

vd:
class doituong{
int i;
float f;
public:
void M
{ i=0;
cout<<"i="< *(int *)this=1;
cout<<"i="< // sua doi gia tri cho i la 1};
};
doituong T;
T.M();

neu ban khai bao mot doi tuong T thi khi ban goi ham M con tro this se
chi den "cho bat dau" cua doi tuong( tuc la bien i).Thong qua con tro
this ban co the biet duoc dia chi cua doi tuong trong bo nho, qua do co
the "lan theo" cac bien, sua doi du lieu...
cho nen...dung bao gio return this;
http://my.opera.com/anhlavip12a4/blog/

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà MinhTuan
Trả lời nhanh
21/3/2011, 21:05
MinhTuan
MinhTuan

Admin

Đúng thế, this là con trỏ đặc biệt trong C++. Nó luôn
trỏ tới object đang được xet. Thông thường khi định nghĩa một class,
chúng ta không cần dùng this. Ví dụ :

class CMyClass
{
int i;
float f;
CMyClass() { i = 0; f = 0.0f; }
};

ở đây, compiler sẽ tự hiểu chúng ta muốn gán giá trị cho 2 biến i va f
thuộc object. Nhưng có trường hợp, chúng ta phải chỉ rõ là muốn sử dụng
biến thuộc object. Ví dụ :

class CMyClass
{
int i;
float f;
CMyClass(int i, float f) { this->i = i; this->f = f; }
};

trong trường hợp này, this->i chính là chúng ta muốn chỉ biến i của class, còn i là tham số của constructor.

Tuy rằng this trỏ tới object đang xét, nhưng thông thường người ta không dùng nó để thay đổi giá trị của member data như sau:

*(int *)this = 0; // tương đương this->i = 0

bởi vì viết như vậy, không những khó hiệu mà còn dễ dẫn đến nhiều lỗi. Ít nhất có 3 trường hợp, cách viết trên sẽ không đúng:

1. Nếu chúng ta thay đổi thứ tự của i va f, tức là đưa f lên trước i.

2. Nếu chúng ta phải thêm một biến thứ ba vào phía trước i.

3. Nếu trong CMyClass có định nghĩa một hàm virtual. Khi đó 4 byte đầu tiên (trên nền Windows) của this sẽ trỏ đến virtual table, chứ không phải địa chỉ của biến i.

Vì thế khi dùng this chúng ta nên để compiler tự xác
định địa chỉ của các biến. Ví du : this->i, this->f,... Khi đó dù
có thêm bớt các biến thì cũng không sợ sai.

Tôi xin giải thích thêm con trỏ this từ dâu mà có. Thực
ra, mọi hàm thành viên của một class bao giờ cũng có thêm một hidden
argument, ngoài nhung argument bạn khai báo. Ví dụ:

CMyClass
{
int i;
..
void Count (void) { (this->i)++; }
};

ở đây hàm Count() không có tham số, nhưng thực ra nó vẫn có một tham số, đó là this. Khi compiler biên dịch, nó sẽ tự động cho thêm một argument vào Count() như sau:

void Count(CMyClass * const this)

và khi bạn gọi hàm Count():

CMyClass myClass;
myClass.Count();

thì compiler sẽ dịch như sau:

myClass.Count() ====> Count(&myClass);

vậy là ở đây this = &myClass, nhờ đó chúng ta có thể dùng this như là con trỏ đến bản thân object đang xét.
http://my.opera.com/anhlavip12a4/blog/

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà MinhTuan
Trả lời nhanh
21/3/2011, 21:09
MinhTuan
MinhTuan

Admin

Con trỏ THIS 48173 Con trỏ THIS 48173 Con trỏ THIS 48173 Con trỏ THIS 48173 bi giờ thì đã hiểu con trỏ THIS là cái quái gì.....ít ra cũng ko như hôm trước.
http://my.opera.com/anhlavip12a4/blog/

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà MinhTuan
Trả lời nhanh
21/3/2011, 21:23
ManhCuong
ManhCuong

Nhóm trưởng

dm viết như thánh, đíu hỉu có vào đầu đc j ko

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà ManhCuong
Trả lời nhanh
21/3/2011, 22:08
mrcadre
mrcadre

Member

viết thế này thì mình mày hiểu a Tuấn:) hik

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà mrcadre
Trả lời nhanh
21/3/2011, 22:32
TaiChat
TaiChat

V.I.P

tao ngồi đọc nửa tiếng éo hiểu nó viết cái gì nữa

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà TaiChat
Trả lời nhanh
21/3/2011, 22:42
phamichnam
phamichnam

Member

nó cug chả bít j đâu.chắc copy trên mạng đó.cug tỏ vẻ như thật y Con trỏ THIS 8898

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà phamichnam
Trả lời nhanh
22/3/2011, 08:37
HoangCuong
HoangCuong

Member

"Con trỏ This là con trỏ dùng chỉ đến đối tượng đang xét"
Quan trọng nhất là câu này Con trỏ THIS 37969

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà HoangCuong
Trả lời nhanh
22/3/2011, 09:18
HoangCuong
HoangCuong

Member

Hàm dựng (còn gọi là cấu tử, Constructor)Cấu tử là hàm thành viên đặc biệt, có tên trùng với tên của lớp, làm nhiệm vụ tạo lập đối tượng theo yêu cầu. Khi một đối tượng được khai báo thì cấu tử sẽ tự động thực hiện để tạo lập đối tượng trong bộ nhớ. Một lớp có thể có nhiều cấu tử (tải bội), cấu tử không có tham số là cấu tử mặc định. Nếu ta không định nghĩa một cấu tử nào thì cấu tử mặc định sẽ được sử dụng, trái lại sẽ không được sử dụng.


#include
class Point
{ int x, y;
public:
Point(){x=0;y=0;} //Cấu tử mặc định
Point(int a, int b=0){x=a;y=b;}
void Display(){cout <<"Toa do: ("< };
int main()
{ Point a, b(1), c(2,3);
a.Display();b.Display();c.Display();
return 0;
}
Đối tượng a được tạo lập bởi cấu tử thứ nhất. Các đối tượng b và c được tạo lập bởi cấu tử thứ hai. Cấu tử thứ hai có một tham số mặc định, nếu ta đặt mặc định cho cả hai tham số thì phải bỏ đi cấu tử thứ nhất, vì nếu không, sẽ dẫn đến sự nhập nhằng khi khai báo Point a; (Ambiguity between 'Point::Point()' and 'Point::Point(int,int)').

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà HoangCuong
Trả lời nhanh
22/3/2011, 09:18
HoangCuong
HoangCuong

Member

Hàm hủy (còn gọi là huỷ tử, destructor)Khi đối tượng không còn được sử dụng thì nên giải phóng nó khỏi bộ nhớ. Các huỷ tử được sử dụng để làm việc này. Huỷ tử cũng là hàm thành viên có tên trùng với tên của lớp, nhưng có thêm ký tự ~ ở trước. Nếu ta không định nghĩa, thì sử dụng huỷ tử mặc định.Tất cả các huỷ tử đều không có tham số. Trong ví dụ trên, ta có thể định nghĩa huỷ tử như sau:


~Point(){}

Wikipedia nha

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà HoangCuong
Trả lời nhanh
22/3/2011, 18:40
TheHung
TheHung

Member

tài liệu thì kiếm đơn giản. cái quan trọng là đọc mình hiểu được cái gì. nản dần đều cái môn này rồi. Con trỏ THIS 545753

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà TheHung
Trả lời nhanh

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà Sponsored content
Trả lời nhanh

Back to topMessage [Page 1 of 1]

  © FMvi.vn

« Xem bài trước | Xem bài kế tiếp »

Bài viết liên quan

    Quyền hạn của bạn:

    You cannot reply to topics in this forum