Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 15 kết quả

Đề tài: Lập trình C++ | Hàm trả về tham chiếu là như thế nào?

  1. #1
    No Avatar
    phoenix2007 Khách

    Question Lập trình C++ | Hàm trả về tham chiếu là như thế nào?

    Cho mình hỏi 3 câu hỏi như sau :
    - Thế nào là hàm trả về tham chiếu ?
    - Hàm trả về tham chiếu dùng để làm jì ?
    - Khi nào nên và không nên sử dụng hàm trả về tham chiếu ?
    Cám ơn các bác nhìu !

  2. #2
    Ngày gia nhập
    12 2006
    Bài viết
    72

    Liệu đây có phải là vấn đề của bạn? :
    Lập trình C++ | Tài liệu lập trình C++ của Phạm Văn Ất
    Chúc vui vẻ!

  3. #3
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Cái này ko biết có giúp gì được cho bạn ko, tôi hay gọi tham chiếu là tham số hình thức biến vì cái tên này thẻ hiện rõ ý nghĩa của nó hơn và định nghĩa về nó như sau:
    Tham số hình thức biến là danh hiệu cục bộ dùng thay cho danh hiệu biến không cục bộ. Nó là tên cục bộ hay sự đổi tên của thông số thực. Sử dụng tham số hình thức biến cho phép người ta gán trị cho biến không cục bộ mà không cần phải biết tên chúng khi viết hàm. Tham số hình thức biến thường đại diện cho output của chương trình con. Tham số hình thức biến thường đi sau dấu &.

  4. #4
    No Avatar
    phoenix2007 Khách

    Trích dẫn Nguyên bản được gửi bởi huynguyen
    Cái này ko biết có giúp gì được cho bạn ko, tôi hay gọi tham chiếu là tham số hình thức biến vì cái tên này thẻ hiện rõ ý nghĩa của nó hơn và định nghĩa về nó như sau:
    Tham số hình thức biến là danh hiệu cục bộ dùng thay cho danh hiệu biến không cục bộ. Nó là tên cục bộ hay sự đổi tên của thông số thực. Sử dụng tham số hình thức biến cho phép người ta gán trị cho biến không cục bộ mà không cần phải biết tên chúng khi viết hàm. Tham số hình thức biến thường đại diện cho output của chương trình con. Tham số hình thức biến thường đi sau dấu &.
    à không, cái này thì mình hiểu rồi ! Hàm chỉ chưa hiểu về "Hàm trả về tham chiếu" thôi à ! Mình cũng đọc sách rồi, nhưng chưa hiểu, mong các bác giải thích thêm

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

    Hàm trả về tham chiếu
    Mới đọc sơ qua về cái này, ko biết có hiểu đúng ý của nó ko, tui nói thử nhé. Với hàm trả về tham chiếu thì thực chất là hàm này nó tương tác với biến mà nó chỉ đến (ko phải con trỏ nhé, tham chiếu đến thôi) và nó xử lý tình huống để trả về kết quả mà mình mong muốn.

  6. #6
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    Mặc định Lập trình C++ | Hàm trả về tham chiếu là như thế nào?

    lan man quá, lan man quá
    - Thế nào là hàm trả về tham chiếu ?
    Hàm trả về tham chiếu tức là những hàm có dạng
    DATATYPE& func(...) {
    ...
    return aDATATYPE; //aDATATYPE là biến thuộc kiểu DATATYPE
    }

    - Hàm trả về tham chiếu dùng để làm jì ?
    Có 2 cách trả về của hàm là: tham chiếu (hay tham biến), và tham trị. Hàm trả về tham chiếu được dùng để tránh Copy Constructor được gọi. Vì hàm trả ra tham trị luôn gọi cho gọi Copy Constructor, tham chiếu thì luôn không

    Hình như có 1 thread bạn hỏi về Copy Constructor, bạn đã hỏi về 2 thứ mà nó dính chặt với nhau. Chút sang giải thích luôn

    - Khi nào nên và không nên sử dụng hàm trả về tham chiếu ?
    Tham chiếu luôn tốt hơn tham trị về mặt performance, nên bất kỳ khi nào dùng được tham chiếu thì nên dùng, vì có những trường hợp không thể dùng được tham chiếu

    Câu hỏi hợp lý hơn là: Khi nào thì dùng được tham chiếu?
    Trả lời là trong trường hợp hàm kết thúc mà biến được trả về của hàm vẫn còn tồn tại thì dùng được tham chiếu

    Trong trương hợp nào thì kết quả trả về của hàm vẫn còn tồn tại khi hàm kết thúc:
    - Khi hàm là thành viên của lớp, và biến trả về là thành viên của lớp
    VD:
    class C {
    int x;
    int& getX() { return x;} //hàm này trả về tham chiếu được
    }

    - Khi biến được trả về có tầm vực cao hơn tầm vực của hàm
    VD:
    int& processX(int& x) { return x; } // hàm này nhận vào tham chiếu x và trả ra tham chiếu x
    - Khi kết quả trả về được cấp phát động, và không được giải phóng trong hàm (trường hợp này hơi không hợp lý, vì trong lập trình hướng đối tượng ko ai làm vậy cả, tuy nhiên nói để hiểu)
    VD
    int& alloc1int() { return int *pInt = new int; return *pInt; }


    còn đây là ví dụ về không dùng được tham chiếu:
    int& func() { int x; ... return x; } //biến x cục bộ, thoát hàm là mất

    Liệu đây có phải là vấn đề của bạn?
    bai cua thangtran khá chất lượng đấy, nếu bạn tham khảo kỹ chắc cũng sẽ tìm ra câu trả lời cho mình

  7. #7
    No Avatar
    phoenix2007 Khách

    Ok, mình hiểu rồi, cám ợn bác huynguyen, thangtran và nguyentuan2 nhiều lắm !

  8. #8
    Ngày gia nhập
    01 2007
    Nơi ở
    Chuồng gà
    Bài viết
    8

    Bài viết chất lượng quá. Thanks.

  9. #9
    No Avatar
    newbie_newbie Khách

    Trích dẫn Nguyên bản được gửi bởi nguyentuan2
    lan man quá, lan man quá
    - Hàm trả về tham chiếu dùng để làm jì ?
    Trả lời là trong trường hợp hàm kết thúc mà biến được trả về của hàm vẫn còn tồn tại thì dùng được tham chiếu
    Trong trương hợp nào thì kết quả trả về của hàm vẫn còn tồn tại khi hàm kết thúc:
    - Khi hàm là thành viên của lớp, và biến trả về là thành viên của lớp
    VD:
    class C {
    int x;
    int& getX() { return x;} //hàm này trả về tham chiếu được
    }

    - Khi biến được trả về có tầm vực cao hơn tầm vực của hàm
    VD:
    int& processX(int& x) { return x; } // hàm này nhận vào tham chiếu x và trả ra tham chiếu x
    - Khi kết quả trả về được cấp phát động, và không được giải phóng trong hàm (trường hợp này hơi không hợp lý, vì trong lập trình hướng đối tượng ko ai làm vậy cả, tuy nhiên nói để hiểu)
    VD
    int& alloc1int() { return int *pInt = new int; return *pInt; }
    bai cua thangtran khá chất lượng đấy, nếu bạn tham khảo kỹ chắc cũng sẽ tìm ra câu trả lời cho mình
    Theo bản chất của tham chiếu, thì mình có thể thay đổi giá trị của biến tham qua biến tham chiếu chiếu đến, như vậy điều này có đúng với hàm trả về tham chiếu hay không ?

    Trích dẫn Nguyên bản được gửi bởi nguyentuan2
    còn đây là ví dụ về không dùng được tham chiếu:
    int& func() { int x; ... return x; } //biến x cục bộ, thoát hàm là mất
    Hình như bạn nhầm ở đây thì phải ! Phải là int mới đúng ! Ko có '&' !

    Trích dẫn Nguyên bản được gửi bởi nguyentuan2
    còn đây là ví dụ về không dùng được tham chiếu:
    int& func() { int x; ... return x; } //biến x cục bộ, thoát hàm là mất
    Theo như bạn nói, giá trị x sẽ mất đi khi hàm thoát ? Vậy nếu mình thức hiện lệnh như thế này : int a = func();
    Thì a có giá trị của x, nhưng x đã mất khi hàm thoát ra rồi, thì làm sao a gán được như vậy ?
    Cái này ko phải mình bắt bẻ bạn nha ! Đừng hiểu nhầm, mình cũng muốn hiểu rõ bản chất của vấn đề nên mới hỏi vậy, thông cảm nha !


    Bạn giải thích giúp mình nha, nhờ có phoenix hỏi mà mình hiểu thêm được chút wa bài viết của bạn đó ! Cám ơn bạn nhiều nha !

  10. #10
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    à, ý của mình cũng giống như bạn đang nghĩ đó
    tức là
    int& func() { int x; ... return x; } //biến x cục bộ, thoát hàm là mất
    cái đó là sai, phải thế này mới đúng
    int func() { int x; ... return x; } //biến x cục bộ, thoát hàm là mất

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

  1. Biến tham chiếu có tác dụng như thế nào và sử dụng khi nào?
    Gửi bởi chungmo trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 22-05-2012, 01:32 PM
  2. Kỹ thuật C++ Sử dụng tham chiếu trong C++ như thế nào?
    Gửi bởi athena1610 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 01-04-2011, 12:32 AM
  3. Kỹ thuật C++ hàm trả về tham chiếu có thể sử dụng nối đuôi trên 1 dòng?
    Gửi bởi manocanh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 26-11-2010, 05:37 AM
  4. Trả về 1 tham chiếu từ 1 hàm.
    Gửi bởi trihn_kt trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 28-06-2010, 03:55 PM
  5. Thắc mắc về truyền giá trị cho tham chiếu
    Gửi bởi boy_popping trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 17-08-2008, 11:28 AM

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