所以我正在學習C++並學習在我的實踐中使用SQLite來跨應用程序運行數據持久性,這非常有趣。C++ #include,嵌套如何包含工作?
但我撞上了這個問題:
該計劃是一個等級書,經典Ditel C++的書運動。我在我的結構化類如下:
~/classes/Database.h/cpp // A small wrapper for sqlite3
~/classes/Student.h/cpp // The Student object with name and grades (Uses Database)
~/classes/GradeBook.h/cpp // Takes care of most of the application logic and UI (Uses Database and Student)
~/main.cpp // contains just the main function and base Instances of Database and GradeBook
這是這樣我就可以從主實例化一個單個數據庫對象()和參照的GradeBook和學生傳遞這樣他們就可以使用數據庫功能。我嘗試了所有可能的包含順序,結果只有這個順序對我有用。
Student includes Database.
GradeBook includes Student, gets access to Database.
main.cpp includes GradeBook, gets access to both Database and Student.
問題是,這是正確的嗎?這似乎完全違反直覺,包括似乎從最深層的類逐漸向main.cpp文件「倒退」,換句話說,我是這麼做的,還是我錯過了什麼?
如果是這樣,一個小小的解釋或指示如何「級聯」的作品將是非常棒的。
謝謝!
爲什麼學生使用數據庫?看起來你可以改進它,以便成績冊使用數據庫和學生。 – perreal 2013-03-26 05:43:50
我希望每個學生對象能夠保存自己的數據,以便從GradeBook中進行這些操作。 – 2013-03-26 05:46:25
設計不健全。爲什麼學生堅持數據庫對象?考慮到這一點,數據庫是用於持久存儲的。 Student和GradeBook是永久性數據的快照,取自(不更改)或存儲到數據庫中。這並不意味着數據庫實例應該被這些數據所瞭解。理想情況下,數據庫將獨立於快照數據。快照數據是使用效用函數從數據庫「加載」的;無論是在類中的靜態函數還是實用程序類。那麼誰擁有數據庫實例?無論誰負責管理學生和GradeBook。 – 2013-03-26 05:47:04