そのため、私はC ++を学び、アプリケーションの実行全体でデータを永続化するための実践でSQLiteを使用することも学びました。これは、とても楽しいことです。
しかし、私はこの問題にぶつかりました:
プログラムはGradeBookであり、古典的なDitelC++の本の練習問題です。私は次のようにクラスを構成しています。
~/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
これは、main()から単一のデータベースオブジェクトをインスタンス化し、GradeBookとStudentを参照して渡すことができるため、データベース関数を使用できるようにするためです。インクルードの可能なすべての順序を試しましたが、この順序だけが機能することがわかりました。
Student includes Database.
GradeBook includes Student, gets access to Database.
main.cpp includes GradeBook, gets access to both Database and Student.
問題は、これは正しいですか?インクルードが最も深いクラスからmain.cppファイルに逆方向に「カスケード」しているように見えることは、まったく直感に反しているようです。つまり、私はこれを正しく行っているのでしょうか、それとも何かが足りないのでしょうか。
もしそうなら、この「カスケード」がどのように機能するかについての少しの説明やポインタはかなり素晴らしいでしょう。
ありがとう!