Câu hỏi này nói lên tất cả. Tôi có cho phép lấy được một lớp từ một cấu trúc hay tôi nên tạo một lớp nhúng cấu trúc của tôi và định nghĩa các hàm tạo bản sao và toán tử = để di chuyển giữa hai lớp?trong C++, tôi có thể lấy được một lớp từ một cấu trúc
Trả lời
Trong C++ struct
là (gần như) đồng nghĩa với một số class
(ngoại trừ các cấp truy cập mặc định khác), vì vậy có, bạn có thể.
struct A {
// fields are public by default
};
class B: public A {
// fields are private by default
};
Tôi không quen với MFC, nhưng có vẻ như cố gắng duy trì cả API C và C++.
Cảm ơn vì điều đó. Tôi đã khá chắc chắn nó là ok, nhưng chưa bao giờ thực sự nhìn thấy nó được thực hiện trong thực tế. –
Tất nhiên rồi. Điều khác biệt liên quan đến thừa kế là nếu bạn định nghĩa một lớp, nó sẽ kế thừa riêng từ các lớp/cấu trúc khác. Nếu bạn định nghĩa một struct và lấy được nó từ một lớp học hoặc struct, nó sẽ là một kế thừa công cộng theo mặc định:
// the following two are equivalent except that one time class is
// used and the other time struct
struct f : g { };
class f : public g { };
Nếu bạn tự hỏi làm thế nào bạn nên quấn C struct - tôi sẽ nhúng chúng như là một thành viên vào lớp . Bởi vì các cấu trúc C không được thiết kế để được kế thừa từ (suy nghĩ về không được bảo vệ cũng như destructor ảo trong các cấu trúc C - họ không thể có một). Chúng là những tập hợp đơn giản thu thập dữ liệu. Và đặt chúng như các thành viên sử dụng chúng như vậy (như trong "một điểm có một cặp tọa độ x và y").
Cấu trúc C cũng phơi bày các thành viên có thể không được để lộ trong lớp học. Ngăn chặn cho phép kiểm soát chính xác những gì được phơi bày và những gì không phải bằng các hàm get/set và bạn vẫn có thể cho phép nó cung cấp cho bạn một bản sao hoặc tham chiếu đến đối tượng C struct có chứa naked.
Có. bạn có thể lấy được một lớp từ một cấu trúc. Trong C++, một struct chỉ đơn giản là một lớp mà ở đó truy cập mặc định là public chứ không phải private. Phát sinh một lớp từ một cấu trúc chỉ thêm các hàm thành viên không phải là phần tử và/hoặc các hàm tĩnh là một kỹ thuật hữu ích để cung cấp một giao diện C++ trong khi vẫn duy trì tính tương thích với một API kiểu C.
Đây chính xác là cách tiếp cận được MFC sử dụng cho nhiều cấu trúc C (trái với những gì bạn nêu trong câu hỏi của bạn).
Ví dụ: lớp CRect được công khai bắt nguồn từ struct tagRECT (tên được sử dụng phổ biến hơn RECT là typededf cho struct tagRECT). Bởi vì struct tagRECT định nghĩa tất cả các thành viên dữ liệu và CRect chỉ thêm các hàm thành viên không phải ảo, bố cục bộ nhớ của CRects và RECTs giống nhau - bạn có thể sử dụng CRect làm đối số cho bất kỳ hàm nào mong đợi RECT và ngược lại.
- 1. Tôi có thể 'mở rộng' một cấu trúc trong C?
- 2. Có thể lấy các yếu tố cấu trúc từ một tệp PDF bằng iTextSharp không?
- 3. Tại sao tôi có thể định nghĩa các cấu trúc và các lớp trong một hàm trong C++?
- 4. C++: Lưu cấu trúc trong một đống
- 5. Làm thế nào một lớp tĩnh có thể lấy được từ một đối tượng?
- 6. tạo một mảng cấu trúc trong C++
- 7. xác định một cấu trúc bên trong một lớp trong C++
- 8. Khai báo một lớp hoặc cấu trúc bên trong một phương thức trong C#
- 9. Lấy một mảng cấu trúc từ dll gốc tới C# application
- 10. Tôi có thể nhận được kích thước của một trường struct w/o tạo một thể hiện của cấu trúc?
- 11. Có cách nào để đổ một cấu trúc C?
- 12. Trong C# có bao nhiêu dòng trước khi một lớp nên được xem xét để được tái cấu trúc?
- 13. Lấy một cấu trúc đồ thị trong Hibernate
- 14. Đi qua một cấu trúc để một hàm trong C
- 15. Khởi tạo một mảng bên trong một cấu trúc từ một mảng trong C++
- 16. Làm thế nào để có được phần tử min hoặc max trong một vec tơ cấu trúc trong C++, dựa trên một số trường trong cấu trúc?
- 17. Tại sao tôi không thể khởi tạo cấu trúc khởi tạo từ cấu trúc khác?
- 18. Có thể/nên lưu trữ một vector trong cấu trúc không? C++
- 19. Cấu trúc có biến mẫu trong C++
- 20. Làm cách nào tôi có thể nhận được một cá thể trong hàm tạo Bản đồ Cấu trúc Bản đồ?
- 21. Bạn có thể sử dụng các biến cục bộ luồng trong một lớp hoặc cấu trúc
- 22. Cấu trúc Clojure được lồng vào nhau trong một cấu trúc khác
- 23. Tôi có thể lấy PTypeInfo từ một chuỗi không?
- 24. Sao chép một cấu trúc sang một cấu trúc khác
- 25. Duyệt qua một cấu trúc cây chung bắt đầu từ một nút tùy ý trong C#
- 26. Cách khởi tạo một mảng cấu trúc trong C++?
- 27. Cấu trúc lớp được bảo vệ trong Java?
- 28. lớp cơ sở của cấu trúc xây dựng trong C#
- 29. Đọc các byte thành một cấu trúc trong C#
- 30. Mảng đa chiều trong một cấu trúc trong C#
Lớp học của lớp Crit được thừa hưởng từ cấu trúc tagRECT, AFAICS. – Constantin
Văn bản xấu của câu hỏi của tôi đã thay đổi. –