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ố 11 kết quả

Đề tài: Định nghĩa class kiểu đệ quy như thế này được không?

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

    Wink Định nghĩa class kiểu đệ quy như thế này được không?

    Bây giờ, mình định nghĩa một class như thế này, các bạn xem giúp mình có okie ko nhé:

    C++ Code:
    1. class A
    2. {
    3.        float a,b;
    4.        A  *aObject;
    5. }

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

    Phải thế này mới đúng :

    C++ Code:
    1. class A;  // thêm cái này
    2. class A
    3. {
    4.        float a,b;
    5.        A  *aObject;
    6. }
    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
    08 2011
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Phải thế này mới đúng :

    C++ Code:
    1. class A;  // thêm cái này
    2. class A
    3. {
    4.        float a,b;
    5.        A  *aObject;
    6. }
    Làm như thế này là dc òi đóa bạn.
    Nếu rảnh bạn đọc cuốn C++ của "Đinh Mạnh Tường" có nói rỏ về cái này

  4. #4
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Phải thế này mới đúng :

    C++ Code:
    1. class A;  // thêm cái này
    2. class A
    3. {
    4.        float a,b;
    5.        A  *aObject;
    6. }
    Khai báo như chủ topic (không có forward declaration) thì sao nhỉ? Meocon giải thích giúp mình được không? Thử trên compiler gcc/g++ thì không forward nó vẫn chạy ngon.

  5. #5
    Ngày gia nhập
    11 2010
    Nơi ở
    Black Hole
    Bài viết
    824

    Theo mình nghĩ là vì meolongvang khi còn học, mấy cái compiler nó chưa hiểu, nhưng bây giờ nó hiểu.
    IT phát triển nhanh mà. Những thắc mắc như của chủ topic là chưa test mà đã hỏi.

    Nhiều định nghĩa lúc này ko dc những năm sau nó lại dc.
    Come as guest...... stay as family......... because we're smiling together.

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

    Mặc định Định nghĩa class kiểu đệ quy như thế này được không?

    Trích dẫn Nguyên bản được gửi bởi clamvn Xem bài viết
    Theo mình nghĩ là vì meolongvang khi còn học, mấy cái compiler nó chưa hiểu, nhưng bây giờ nó hiểu.
    IT phát triển nhanh mà. Những thắc mắc như của chủ topic là chưa test mà đã hỏi.

    Nhiều định nghĩa lúc này ko dc những năm sau nó lại dc.
    Chuẩn, rất chuẩn !
    Khai báo forward để độc lập với compiler, dùng được cho cả compiler ngu và khôn luôn.
    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.

  7. #7
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Mong bạn giải thích rõ ràng hơn! Không phải làm khó bạn, mà là mình muốn tìm hiểu đến nơi đến chốn.
    Bạn biết compiler nào ngu (không chấp nhận cách viết không forward declaration) ? C/C++ standard có quy định gì về vấn đề này?

    P.S:
    Nhìn cách khai báo 1 class chứa con trỏ đến chính nó, mình nghĩ đến danh sách liên kết. Mình vừa thử google về linked-list thì thấy dù C hay C++, cũng không thấy chỗ nào khai báo forward cả.

  8. #8
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Ko hiểu chủ topic hiểu từ đệ quy có nghĩa là gì?
    class kiểu đệ quy có nghĩa là gì ?
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

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

    Trích dẫn Nguyên bản được gửi bởi fbchicken Xem bài viết
    Mong bạn giải thích rõ ràng hơn! Không phải làm khó bạn, mà là mình muốn tìm hiểu đến nơi đến chốn.
    Bạn biết compiler nào ngu (không chấp nhận cách viết không forward declaration) ? C/C++ standard có quy định gì về vấn đề này?

    P.S:
    Nhìn cách khai báo 1 class chứa con trỏ đến chính nó, mình nghĩ đến danh sách liên kết. Mình vừa thử google về linked-list thì thấy dù C hay C++, cũng không thấy chỗ nào khai báo forward cả.
    Hầu hết các trình biên dịch mới hiện nay đều có thể biên dịch được mà ko cần khai báo forward. Nhưng nếu mở rộng ra trường hợp có 2 class A và B, 2 class này có khai báo con trỏ trỏ tới lẫn nhau thì class khai báo sau phải có forward. Mấy dòng vs từ 2k8 trở xuống đều bị. Gcc thì mình chưa test. Còn bạn hỏi lý thuyết vể chuẩn này chuẩn này nọ thì mình bó tay, mình chữ trả thầy cả rồi .
    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.

  10. #10
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Hầu hết các trình biên dịch mới hiện nay đều có thể biên dịch được mà ko cần khai báo forward. Nhưng nếu mở rộng ra trường hợp có 2 class A và B, 2 class này có khai báo con trỏ trỏ tới lẫn nhau thì class khai báo sau phải có forward. Mấy dòng vs từ 2k8 trở xuống đều bị. Gcc thì mình chưa test. Còn bạn hỏi lý thuyết vể chuẩn này chuẩn này nọ thì mình bó tay, mình chữ trả thầy cả rồi .
    Hihi. Đúng là trường hợp 2 class A và B chứa con trỏ đến lẫn nhau thì chắc chắn là phải khai báo fw rồi. Nhưng trong trường hợp câu hỏi của chủ topic, thì 1 class chứa con trỏ đến chính nó là hoàn toàn hợp lệ. Có 1 câu trong document ISO IEC 14482:1998 trực tiếp nói về vấn đề này:
    9.2.8
    Members that are class objects must be objects of previously declared classes. In particular, a class cl may not contain an object of class cl , but it may contain a pointer or reference to an object of class cl
    Đừng cười vì mình "lý thuyết suông", tra cứu lý thuyết kỹ quá nha. hehe

    Đi sâu hơn 1 chút, thì ngay từ khi bắt đầu định nghĩa class A {, cho đến khi kết thúc định nghĩa (dấu } tương ứng) - quá trình này gọi là member specification của class A; thì A tối thiểu là 1 incomplete-type (ở 1 số vị trí nó được coi là complete-type). C/C++ cho phép khai báo con trỏ đến 1 incomplete-type. Ngoài ra việc khai báo forward class A; cũng chỉ có tảc dụng khai báo A là 1 incomplete-type, vì vậy khai báo như vậy ngay trước specification của class A là dư thừa.

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

  1. Định nghĩa các sự kiện cho class trong C# như thế nào ?
    Gửi bởi logweb176 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 27-06-2012, 11:09 AM
  2. Lỗi: error C2440: 'initializing' : cannot convert from 'class xxx *' to 'class xxx *' sửa như thế nào?
    Gửi bởi Nupakachy trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 16-06-2011, 08:54 PM
  3. cài đặt class Tam Giac kế thừa class Diem, như thế nào?
    Gửi bởi be_sau trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 19-10-2010, 03:52 PM
  4. Khi định nghĩa lớp không có từ khóa nào đứng trước class nghĩa là sao?
    Gửi bởi nguyenvanhoc trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 29-10-2009, 11:12 PM
  5. Tại sao có struct rồi còn sinh ra class. Lợi thế của class là gì?
    Gửi bởi car0ot trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 24
    Bài viết cuối: 24-10-2008, 05:26 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