Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: ý nghĩa và tác dụng của con trỏ *this?

  1. #1
    Ngày gia nhập
    11 2008
    Bài viết
    5

    Mặc định ý nghĩa và tác dụng của con trỏ *this?

    Mấy huynh làm ơn chỉ cho đệ cái con trỏ *this là gì . Các ứng dụng của nó luôn . Sao em đọc hoài mà không hiểu
    Với lại ai có cuốn C++ programming thì cho em xin với .

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Con trỏ this là con trỏ trỏ đến chính đối tượng đang xét.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Hồi xưa mình học thì có một câu "thần chú" thế này
    "this là một con trỏ hướng đối tượng, nó giữ địa chỉ của đối tượng nó thuôc về" câu này nó sẽ tương đương với câu nói của mèo
    Mình giải thích rõ hơn cho bạn:
    this nó là một con trỏ thì cái nó lưu chính là địa chỉ, mà địa chỉ đó là địa chỉ của đối tượng đang gọi thực hiện phương thức.

    Còn Ebook ban có thể vào kho Ebook của X hoặc là vào Box công cụ, Ebook để kiếm trong đó tha hồ mà kiếm, chỉ sợ không đủ sức mà đọc nó thui

  4. #4
    Ngày gia nhập
    11 2008
    Bài viết
    5

    OK, để hiểu this là gì, cách tốt nhất là nhìn vào mã assembly của nó.
    Mình đưa ra một ví dụ thuần assembly để chạy đoạn code tương đương sau của C++:
    PHP Code:
    class st
    {
          
    int a;
          public:
               
    void  print()
               {
                   
    a++;
               }
    };

    int main()
    {
        
    st s;
        
    s.print();

    Bây giờ là file dummy.asm ( dùng MASM để dịch và chạy )
    PHP Code:
        .686P
        
    .XMM
        
    include listing.inc
        
    .model    flat

    INCLUDELIB MSVCRT
    INCLUDELIB OLDNAMES
    PUBLIC    print                
    PUBLIC    
    _main
    _TEXT    SEGMENT
    _main     PROC

        push    ebp
        mov    ebp
    esp
        sub    esp
    8
        lea    ecx
    DWORD PTR [ebp-4]; ****************
        
    call    print    ; *******************
        xor    
    eaxeax
        mov    esp
    ebp
        pop    ebp
        ret    0

    _main     ENDP
    _TEXT    ENDS

    _TEXT    SEGMENT
    print  PROC                
        push    ebp
        mov    ebp
    esp
        push    ecx 
    ; *******************
        
    mov    DWORD PTR [ebp-4], ecx ; ************
        
    inc    BYTE PTR [ecx]; *************
        
    mov    espebp
        pop    ebp
        ret    0
    print  ENDP                    
    _TEXT    ENDS
    END 
    Nhìn vào các dòng * ở trên, có thể thấy rằng, trước khi gọi s.print(), địa chỉ của s được đưa vào thanh ghi ecx, và trong thân hàm print(), tham số đầu tiên ( [ebp-4] ) chính là ecx, và nó là địa chỉ của đối tượng được gọi ( s ).
    Đã được chỉnh sửa lần cuối bởi Rev_ : 06-11-2008 lúc 02:57 AM.

  5. #5
    Ngày gia nhập
    10 2008
    Bài viết
    5

    xét ví dụ:
    Code:
    #include<iostream.h>
    #include<iomanip.h>
    #include<conio.h>
    #include<math.h>
    class diem
    {
       private:int x,y;
       public:
          void input()
          {
              cout<<"\nNhap vao toa do diem:\n";
              cin>>x,y;
          }
          void output()
          {
              cout<<"\nA("<<x<<","<<y<<")";
              getch();
          }
          float khoangcach(diem ob)
          {
              return(sqrt(pow(ob.x-x,2)+pow(ob.y-y,2)));
          }
    };
    void main()
    {
       diem ob1,ob2;
       ob1.input();
       ob1.output();
       ob2.input();
       ob2.output();
       float k=ob1.khoangcach(ob2);
       cout<<"\nkhoang cach la:"<<k;
       getch();
    }
    Giải thích :
    Trong hàm tính khoảng cách thì mình đã sử dụng con trỏ this.
    Khi sử dụng hàm này trong chương chình chính thì con trỏ this chính là đối tượng ob1.
    Hàm khoangcach có thể viết lại như sau.
    Code:
     float khoangcach(diem ob)
          {
              return(sqrt(pow(ob.x-this->x,2)+pow(ob.y-this->y,2)));
          }
    Luôn muốn hỏi

  6. #6
    Ngày gia nhập
    09 2008
    Nơi ở
    Kĩ viện
    Bài viết
    169

    Mặc định ý nghĩa và tác dụng của con trỏ *this?

    *this
    Cái này không phải con trỏ. Là con trỏ và dấu * đằng trước.
    Phá toái hư không - Bạch nhật thăng thiên.

  7. #7
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    NVD nói đúng rồi, có dấu * đằng trước là khử tham chiếu cho con trỏ rồi
    Cánh Chym ứ mỏi

Các đề tài tương tự

  1. Liên thông trung cấp nghề,cao đẳng nghề lên đại học chính quy 2012
    Gửi bởi cafetrungnguyen trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 31-07-2012, 02:03 PM
  2. Trả lời: 0
    Bài viết cuối: 02-08-2011, 03:26 PM
  3. Nhập ký tự đầu tiên của một nghề sẽ xuất ra nghề đó bằng việc sử dụng enum?
    Gửi bởi sasadudu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 05-03-2011, 09:25 PM

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

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn