User Tag List

+ Trả lời chủ đề
Trang 1/2 12 CuốiCuối
Hiện kết quả từ 1 tới 10 của 11

Chủ đề: Truyền tham số cho hàm trong C++

  1. #1
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Truyền tham số cho hàm trong C++

    Tớ có hàm swap như thế này:

    PHP Code:
    int swap(int *aint *b) {
        
    int tmp;
        
    tmp = *a;
        *
    = *b;
        *
    tmp;
        return 
    0;

    2 biến x, y kiểu int

    Thông thường thì gọi swap phải truyền vào con trỏ int* như sau: swap(&x, &y)

    Nhưng trong C++ thì truyền vào là swap(x, y) thì vẫn chạy bình thường và cho kết quả giống như swap(&x, &y).

    Trong C nếu gọi swap(x, y) thì biên dịch có warning nhưng khi chạy thì lỗi run-time.

    (Trình biên dịch gcc và g++ 4.6.3)

    Vậy là sao nhỉ, tại sao C++ lại chấp nhận gọi swap(x, y) vậy mọi người?
    Contact me:
    Email: sangnd [at] svBK.vn
    Personal website: My Blog | Chat với người lạ
    Facebook Page của Bách Khoa Forum: http://www.facebook.com/svbk.vn

  2. Tớ cảm ơn 1973 đã chia sẻ.


  3. #2
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Truyền tham số cho hàm trong C++

    Yeah, vấn đề đã được giải quyết, thì ra là khi nó gọi swap(x, y) thì nó đã gọi hàm swap trong thư viện std chứ không dùng hàm swap mình định nghĩa, do vậy mà nó vẫn chạy được bình thường.

  4. #3
    HUT's Engineer
    Tham gia ngày
    Jun 2011
    Bài gửi
    686

    Mặc định Re: Truyền tham số cho hàm trong C++

    lập trình cấu trúc nguy hiểm quá
    don't ask, i'm trying to improve my english skill by using it more often

  5. #4
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Truyền tham số cho hàm trong C++

    Quote Nguyên văn bởi pkthanh92 Xem bài viết
    lập trình cấu trúc nguy hiểm quá
    Cái này là overloading thì đúng hơn chứ không phải do lập trình cấu trúc. Trong lập trình hướng đối tượng thì trường hợp này xảy ra khi lớp con kế thừa lớp cha và đôi khi không biết là đã kế thừa những gì từ lớp cha

  6. #5
    HUT's Engineer
    Tham gia ngày
    Jun 2011
    Bài gửi
    686

    Mặc định Re: Truyền tham số cho hàm trong C++

    lập trình cấu trúc thì mới cho phép gọi hàm ko cần đối tượng

    nếu đóng hàm swap trên vào môt lớp thì ko xảy ra nhầm lẫn nữa

  7. #6
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Truyền tham số cho hàm trong C++

    Quote Nguyên văn bởi pkthanh92 Xem bài viết
    lập trình cấu trúc thì mới cho phép gọi hàm ko cần đối tượng

    nếu đóng hàm swap trên vào môt lớp thì ko xảy ra nhầm lẫn nữa
    Nếu lớp đó kế thừa một lớp cha, rồi lớp cha lại đa kế thừa vài lớp nữa thì sao?

    C cũng là ngôn ngữ lập trình cấu trúc đấy có sao đâu?

    Vấn đề ở đây là overloading chứ không phải là do cấu trúc hay là hướng đối tượng.

  8. Tớ cảm ơn 1973 đã chia sẻ.


  9. #7
    HUT's Engineer
    Tham gia ngày
    Jun 2011
    Bài gửi
    686

    Mặc định Re: Truyền tham số cho hàm trong C++

    cậu sát nhập một namespace mà ko biết rõ namespace có những hàm gì vào namespace mặc định của cậu -> gọi hàm trong namespace kia mà ko biết

    nếu dùng hướng đối tượng, ko bao giờ có chuyện sát nhập 2 lớp vào làm 1, tuy kế thừa vẫn có thể gây nhầm lẫn, nhưng khả năng ko lớn, vì lớp cha bao giờ cũng nhỏ hoặc chỉ làm một việc gì đó nhất định (để đảm bảo tính cohension), cho nên nguy cơ xảy ra hiểu nhầm nhỏ hơn rất nhầm so với việc sát nhập namespace.

    làm việc với Java hoặc C# cho dù hỗ trợ overloading rất mạnh nhưng hiếm khi thấy ai than phiền về mấy kiểu hiểu làm này cả.

  10. #8
    HUT's Student
    Tham gia ngày
    Feb 2012
    Bài gửi
    272

    Mặc định Re: Truyền tham số cho hàm trong C++

    Nguy hiểm ở đây là sử dụng namespace một cách vô thức.
    Rất nhiều sách C++ hiện này luôn cho lệnh "using namespace std;" vào các ví dụ, người học thấy thế cũng làm theo, tưởng đó là chuẩn.

    Kinh nghiệm: luôn dùng std::<tên> thay cho việc using namespace std.
    http://openandfree.wordpress.com/200...std-hay-khong/

  11. Tớ cảm ơn boss14420 đã chia sẻ.


  12. #9
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Truyền tham số cho hàm trong C++

    Nếu lớp cha là do mình tạo ra thì có thể còn biết rõ là nó có những gì. Nhưng nếu lớp cha là một lớp trong thư viện có sẵn thì liệu cậu có biết hoặc nhớ được hết toàn bộ những gì lớp cha có để sử dụng và tránh nhầm lẫn không? Ví dụ lớp JPanel, JButton,... trong Java thì cậu có nhớ được hết không?

    Ở kia là cái namespace std nó có nhiều hàm ở trong mà mình không biết rõ và khi sử dụng gây ra nhầm lẫn chứ đâu phải do lập trình cấu trúc. Giả sử trong C# có một lớp tương tự namespace std mà cậu extends thì cậu có nhầm lẫn không?

    Còn nữa là cậu chưa trả lời được câu hỏi của tớ là tại sao C cũng là ngôn ngữ lập trình cấu trúc mà không bị đấy.

  13. #10
    HUT's Engineer
    Tham gia ngày
    Jun 2011
    Bài gửi
    686

    Mặc định Re: Truyền tham số cho hàm trong C++

    thì tớ đã nói, một lớp thì luôn có tính cohension, JFrame thì chỉ làm việc với cửa sổ thôi, ko ai định nghĩa swap trong jframe cả
    một namespace thì khác, nào là cout, cin, lại còn định nghĩa thêm swap nữa, các hàm ko liên quan gì đến nhau
    bản chất lỗi là do cậu ko lường hết được các hàm mà namespace có

    hiểu nhầm xảy ra ko phải vì overloading mà vì dùng overloading với lập trình cấu trúc, C ko hỗ trợ overloading -> ko gây hiểu nhầm

+ Trả lời chủ đề
Trang 1/2 12 CuốiCuối

Thông tin chủ đề

Users Browsing this Thread

Hiện có 1 người đọc bài này. (0 thành viên và 1 khách)

Từ khóa (Tag) của chủ đề này

Quyền viết bài

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


About svBK.VN

    Bách Khoa Forum - Diễn đàn thảo luận chung của sinh viên ĐH Bách Khoa Hà Nội. Nơi giao lưu giữa sinh viên - cựu sinh viên - giảng viên của trường.

Follow us on

Twitter Facebook youtube