2016-04-22 18 views
0

Ich habe eine kleine Konsolenanwendung in C++ erstellen, die die folgenden tun:Speicher von Objekten in einem Array von einem zweiten Objekt

Klasse Thema erstellen, die neben Attributen: Name des Themas, die Anzahl der Studenten und Array von Studenten, die dieses Thema besuchen. Danach erstellen Sie eine Klasse Student, die Vor- und Nachnamen des Studenten als Attribute hat. In der Hauptdatei zählen Sie, wie viele doppelte Namen in jedem Betreff vorhanden sind.

Ich habe hier ein paar Probleme. Das erste ist, dass ich nicht weiß, wie man ein Array in meiner Subject.h Datei initialisiert. Zweitens ist, wie man Student Objekte in Subject Objekte tatsächlich setzen und die Namen am Ende vergleichen.

Was ich Ausgabe aussehen möchten:

Doppelte Namen in subjectA sind: Michael.

Doppelte Namen in subjectB sind: Nicholas, John.

Dabei sollten subjectA und subjectBC++ und C genannt werden.

Hier ist mein Code so weit (ich googelte für die letzten ein oder zwei Stunden über dieses Problem von mir, aber ich konnte einfach keine richtige Antwort finden/Beispiel).

HINWEIS: Ich schließe alle diese Dateien zur Klärung ein.

Subject.h

#include <string> 
#include <iostream> 

using namespace std; 

/* 
* I should also have an array named `arrayOfStudents` 
* which should store all students who are attending 
* that Subject. 
*/ 

class Subject 
{ 
public: 
    Subject(); 
    Subject(Subject &subject); 
    Subject(string nameOfSubject, int numberOfStudents); 
    ~Subject(); 

    const string getNameOfSubject(); 
    const int getNumberOfStudents(); 

    void setNameOfSubject(string nameOfSubject); 
    void setNumberOfStudents(int numberOfStudents); 
    void print(); 
private: 
    string nameOfSubject; 
    int numberOfStudents; 
}; 

Subject.cpp

#include <iostream> 
#include "Subject.h" 

using namespace std; 

Subject::Subject() 
{ 

} 

Subject::Subject(string nameOfSubject, int numberOfStudents) 
{ 
    this->nameOfSubject = nameOfSubject; 
    this->numberOfStudents = numberOfStudents; 
} 

Subject::Subject(Subject &Subject) : nameOfSubject(Subject.getNameOfSubject()), numberOfStudents(Subject.getNumberOfStudents()) 
{ 

} 

Subject::~Subject() 
{ 
    cout << "Object is destroyed" << endl; 
} 

const string Subject::getNameOfSubject() 
{ 
    return nameOfSubject; 
} 

const int Subject::getNumberOfStudents() 
{ 
    return numberOfStudents; 
} 

void Subject::setNameOfSubject(string nameOfSubject) 
{ 
    nameOfSubject = this->nameOfSubject; 
} 

void Subject::setNumberOfStudents(int numberOfStudents) 
{ 
    numberOfStudents = this->numberOfStudents; 
} 

void Subject::print() 
{ 
    cout << "Subject: " << nameOfSubject << " :: Number of students: " << numberOfStudents << endl; 
} 

Student.h

#include <string> 
#include <iostream> 

using namespace std; 

class Student 
{ 
public: 
    Student(); 
    Student(Student &student); 
    Student(string name, string surname); 
    ~Student(); 

    const string getName(); 
    const string getSurname(); 

    void setName(string name); 
    void setSurname(string surname); 
    void print(); 
private: 
    string name; 
    string surname; 
}; 

Student.cpp

#include <iostream> 
#include "Student.h" 

using namespace std; 

Student::Student() 
{ 

} 

Student::Student(string name, string surname) 
{ 
    this->name = name; 
    this->surname = surname; 
} 

Student::Student(Student &student) : name(student.getName()), surname(student.getSurname()) 
{ 

} 

Student::~Student() 
{ 
    cout << "Object is destroyed" << endl; 
} 

const string Student::getName() 
{ 
    return name; 
} 

const string Student::getSurname() 
{ 
    return surname; 
} 

void Student::setName(string name) 
{ 
    name = this->name; 
} 

void Student::setSurname(string surname) 
{ 
    surname = this->surname; 
} 

void Student::print() 
{ 
    cout << "Student: " << name << " " << surname << endl; 
} 

Main.cpp

#include <iostream> 
#include "Subject.h" 
#include "Student.h" 

using namespace std; 

int main() 
{ 
    /* 
    * First three students should attend first Subject 
    * while other four the second Subject. 
    * Also note that only names matter and not surnames. 
    */ 

    Student stA("Michael", "Doe"); 
    Student stB("Michael", "Doe"); 
    Student stC("Thomas", "Doe"); 
    Student stD("Nicholas", "Doe"); 
    Student stE("Nicholas", "Doe"); 
    Student stF("John", "Doe"); 
    Student stG("John", "Doe"); 

    Subject subjectA("C++", 3); 
    Subject subjectB("C", 4); 

    return 0; 
} 
+0

'nameOfSubject = this-> nameOfSubject;' ist rückwärts in 'setNameOfSubject' und anderen. Aber ich sehe keinen Code zum Drucken "Doppelte Namen ...", also, wer weiß? –

+0

Bitte schreiben Sie einen [MCVE], wenn Sie gute Antworten erhalten möchten –

Antwort

0

Ihre Aufgabendefinition sais sollten Sie einen Array von Studenten der Fachklasse Attribut, aber ich sehe das nicht in Ihrem Definition der Fachklasse. Und vielleicht eine Student-Methode hinzufügen und dann über das Array iterieren.

+0

Ich sagte, dass ich nicht weiß, wie man es initialisiert. Ich bekomme Fehler überall in 'Subject.cpp' Datei. – brajevicm

+0

Ich würde der Subject-Klasse ein anderes Attribut geben, das speichert, wie viele Studenten bereits dem Student-Array hinzugefügt wurden, dann würde ich im Add-Student überprüfen, ob es kleiner oder gleich der Anzahl von Schülern ist, dann würde ich das Schüler-Obj zur Zählung hinzufügen Index des Arrays – David

1

1) eine Reihe von Studenten in die Subject-Objekt-Adresse: Sie wahrscheinlich Vektoren anstelle von Arrays verwenden möchten hier: in subject.h

#include "Student.h" 

public: 
    void addStudent(Student student); 
private: 
    std::vector<Student> students_; 

in subject.cpp zugeben

void Subject::addStudent(Student student) 
    { 
     this->students_.push_back(student); 
    } 

Wenn Sie die Schülerliste später irgendwie extrahieren möchten, müssen Sie eine Funktion schreiben, um darauf zuzugreifen (oder öffentlich zu machen).

2) Für Duplikate zu finden, schauen Sie hier Checking for duplicates in a vector

Sie haben darauf zu achten: die Studenten Objekte sind in Ihrem Fach Objekt, nicht die Schülernamen. Sie müssen sie zuerst extrahieren und z. lege sie in einen Vektor.

+0

Danke, ich werde einen Blick in Vektoren werfen. – brajevicm

Verwandte Themen