Распечатать массив объектов

0

Я хочу напечатать массив объектов двух классов. У меня классный класс как Base класс и CS_student, IS_student производные классы, и у меня есть массив студентов типа, и я хочу напечатать его в функции печати университетского класса.

Я хочу 3 варианта:

  1. распечатать все CS_student.
  2. напечатайте все IS_student.
  3. распечатайте все CS_student и IS_student.

Но он печатает только один объект. Здесь мой код

class student (){
int ID;
string first_Name;
string last_Name;

public:
virtual void print ()=0; };

class CS_student ():public student {

public:
    void print(){
        cout<<" CS student "<<endl;}
};
class IS_student():public student {

public:
    void print(){
        cout<<"IS student"<<endl;}
};
class university {
    student **S;
    int size;
public :
    university (){
        S= new student *[size];
        size = 10;}
        ........
        ........

        void Print(){
            int y;
            cout<<"enter 1 to print CS student , enter 2 to print IS 
    student , enter 3 to print all CS and IS students";
            cin>>y;
            switch(y){
                case 1:{
                    for ( int i =0 ; i<size ; i++){
                      student * obj = S[i];
                      CS_student *obj2 = dynamic_cast<CS_student*>(obj);
                      if(obj2){
                     obj2->print();}
                    }
                       }
                       break;
                case 2:{
                    for ( int i =0 ; i<size ; i++){
                      student * obj = S[i];
                      IS_student *obj2 = dynamic_cast<IS_student*>(obj);
                      if(obj2){
                     obj2->print();}
                    }
                       }
                       break;
                case 3:{
                    for ( int i =0 ; i<size ; i++){
                       S[i]->print();}
                    break;
                default:{
                    cout<<"Error";
                        }
                       }
            }
        }
};
  • 0
    Вы, кажется, не знакомы с понятием «последовательность». Но интуитивно, как вы думаете, S = new student *[size]; size = 10; делает?
  • 0
    Что произойдет, если вы пропустите проверки if(obj2){...} ? Это сбой? Тогда я предполагаю, что в вашем массиве есть нулевые указатели.
Показать ещё 2 комментария
Теги:
class
object
arrays

2 ответа

2

Вы инициализируете S= new student *[size]; перед установкой size=10. Перед использованием вы должны инициализировать переменную size.

  • 0
    я сделал .. но все же печать не работает хорошо
  • 0
    Не пропускает if(obj2){...} проверка if(obj2){...} программу? Есть ли какая-то конкретная причина, по которой вы их привели?
Показать ещё 2 комментария
0
S= new student *[size];
size = 10;

Таким образом, вы используете size как длину динамически распределенного массива, а затем задаете размер 10. Какой размер массива? Хорошо, когда вы использовали его, он был неинициализирован, и использование его имело неопределенное поведение. Вам нужно поменять местами эти две строки так, чтобы size равен 10 при создании массива.

  • 0
    размер = 10; Это опечатка, я послал размер от основного, когда я создаю объекты, я не написал все методы, но он работает хорошо ... только печать

Ещё вопросы

Сообщество Overcoder
Наверх
Меню