Trong dự án C ++ của tôi, tôi có hai lớp Particle
và Contact
. Trong Particle
lớp, tôi có một biến thành viên std::vector<Contact> contacts
chứa tất cả các liên hệ của một Particle
đối tượng và các hàm thành viên tương ứng getContacts()
và addContact(Contact cont)
. Do đó, trong "Particle.h", tôi bao gồm "Contact.h".
Trong Contact
lớp, tôi muốn thêm mã vào hàm tạo cho lệnh Contact
đó sẽ gọi Particle::addContact(Contact cont)
, để nó contacts
được cập nhật cho cả các Particle
đối tượng mà Contact
đối tượng đang được thêm vào. Vì vậy, tôi sẽ phải đưa "Particle.h" vào "Contact.cpp".
Câu hỏi của tôi là liệu điều này có được chấp nhận / thực hành mã hóa tốt hay không và nếu không, cách nào tốt hơn để thực hiện những gì tôi đang cố gắng đạt được (chỉ cần đặt, tự động cập nhật danh sách các liên hệ cho một hạt cụ thể bất cứ khi nào có liên hệ mới được tạo ra).
Các lớp này sẽ được liên kết với nhau bởi một Network
lớp sẽ có các hạt N ( std::vector<Particle> particles
) và Nc contact ( std::vector<Contact> contacts
). Nhưng tôi muốn có thể có các hàm như particles[0].getContacts()
- có ổn không khi có các hàm như vậy trong Particle
lớp trong trường hợp này, hoặc có một "cấu trúc" liên kết tốt hơn trong C ++ cho mục đích này (của hai lớp liên quan được sử dụng trong lớp khác) .
Tôi có thể cần một sự thay đổi quan điểm ở đây trong cách tôi đang tiếp cận điều này. Do hai lớp được kết nối bởi một Network
đối tượng lớp, nên tổ chức mã / lớp điển hình có thông tin kết nối được kiểm soát hoàn toàn bởi Network
đối tượng (trong đó một đối tượng Hạt không nên biết về các liên hệ của nó và do đó, nó không nên có getContacts()
thành viên chức năng). Sau đó, để biết những liên hệ nào mà một hạt cụ thể có, tôi sẽ cần lấy thông tin đó thông qua Network
đối tượng (ví dụ: sử dụng network.getContacts(Particle particle)
).
Nó sẽ ít điển hình hơn (thậm chí có thể không khuyến khích) thiết kế lớp C ++ cho một đối tượng Hạt để có kiến thức đó, (có nghĩa là có nhiều cách để truy cập thông tin đó - thông qua đối tượng Mạng hoặc đối tượng Hạt, có vẻ thuận tiện hơn )?
Network
đối tượng lớp có chứa Particle
các đối tượng và Contact
đối tượng. Với kiến thức cơ bản đó, sau đó tôi có thể cố gắng đánh giá xem nó có phù hợp với nhu cầu cụ thể của mình hay không, vẫn đang được khám phá / phát triển khi tôi đi cùng trong dự án.