2012-01-25 7 views
0

私の思考方法が間違っているのは単なる好奇心です。私の考え方がうまくいくのでしょうか、コード内にポインタ/参照が必要でしょうか?どのようにこれにアプローチしますか?私はこの時点でちょっとスケッチしています。私の懸念に対する私のコメントを見てください。主に私がポインタを使うべきかどうか、そして私のStudentクラスでクラスを参照する方法について興味があります。どうすればこの問題を解決できますか?オールドファッションの学生/コース/学校コード。ここに私のアプローチがあります:

短縮例問題:あなたができるプログラムを作成します。 1)学校 2からの学生を作成/削除)学校 3からコースを作成/削除)コース から学生を追加/削除4.)学生が中にあるコースのリストを印刷します)もちろん 5の学生のリストを出力します。

class Student 
{ 
    public: 
    string name; 
    int id; 
    Student(){};//Default Construct 
    Student(int idin,string namein) 
    { 
     id=idin; 
     name=namein; 
    } 
    void PrintClasses() 
    { 
     //Umm... I can't create a Class Vector yet because Class is declared under this.. Hmm... Not sure on this part. 
    } 
}; 


class Class 
{ 
public: 
    int id; 
    string name; 
    Student students_in_class; //Is this the right way to store students in the class? 

    Class(){};//Default Constructor 
    Class(int idin, string namein) 
     { 
     id=idin; 
     name=namein; 
     } 
    void PrintStudents() 
    { 
     for (i=0;i<students_in_class.size();i++) 
     { 
      cout<<students_in_class.id<<'\n'; 
     } 
    } 
}; 

class School 
{ 
public: 
    Vector<Student> studentlist; 
    Vector<Class> classlist; 

    //This is where you do everything. 
    void StudentAdd(int id,string name) 
    { 
     //Adds a student to the school 
     Student mystudent=Student(id,name); 
     studentlist.push_back(mystudent); 
    } 
    void StudentAdd2Course(int student_id,int course_id) 
    { 
     for (i=0;i<classlist.size();i++) 
      { 
       if(classlist[i].id==course_id) 
       { 
        //Correct Class ID Found. Now find student Id 
        for (int j=0;j<studentlist.size();j++) 
         if(studentlist[j].id==student_id) 
          classlist[i].students_in_class.push_back(studentlist[j]);//Push Student in class list 
       } 
      } 

    } 
    void StudentRemoveFromCourse(int student_id,int course_id) 
    { 
     for (i=0;i<classlist.size();i++) 
      { 
       if(classlist[i].id==course_id) 
       { 
        //Correct Class ID Found. Now find student Id 
        for (int j=0;j<studentlist.size();j++) 
         if(studentlist[j].id==student_id) 
          classlist[i].students_in_class.erase(studentlist[j]);//Push Student in class list 
       } 
      } 

    } 

    //Other functions like create class, delete class, etc 

}; 
+0

'Class'クラスの' students_in_class'プロパティは 'Vector 'ではないでしょうか? – xbonez

+0

これはC++の問題よりもデータベースに似ています。 –

+0

@Kerrek - インタビューの質問のように聞こえる...... – Soren

答えて

2

何かオブジェクト指向の設計時に一般的に、私は単純なクラスで起動しよう、としましょう他のクラスは、人形のようにそれらに作用します(モデリングの学生にもかかわらず、人工的ではありません)。

この場合、学生は単純なクラス、コースは学生を含むコース、そしてScoolはコース(およびおそらくは学生)を含むストレートフォワードジョブです。

唯一の問題は、学生が履修するコースを印刷することです。概念的には、単純なオブジェクトよりも多くの情報を必要とするため、概念的にはStudentクラスには入れないようにします。

これを実装する場合は、既存のデータをループするか、余分な情報を保持することができます。後者を行う場合は、余分な情報が通常のシステムで一貫していることを確認してください。

ps。 C++でイテレータを使ってループを書く方法を調べましょう。

+0

ありがとう。私はこの試みを試みましたが、失敗しています。私が学生を押し戻すと、「生徒」の私のベクトルのサイズは更新されません。次の質問をここに投稿しました: http://stackoverflow.com/questions/9014050/whats-wrong-with-my-logic-my-vector-or-an-object-doesnt-push-back-a-new -objec – CREW

関連する問題