打印对象数组

时间:2013-12-22 16:43:09

标签: c++ arrays class object

我想打印两个类的对象数组。我有班级学生作为Base班级,CS_studentIS_student派生班级,我有一个学生类型的数组,我想在班级大学的打印功能中打印它。< / p>

我想要3个选项:

  1. 打印所有CS_student。
  2. 打印所有IS_student。
  3. 打印所有CS_student和IS_student。
  4. 但它只打印一个对象。这是我的代码

    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";
                            }
                           }
                }
            }
    };
    

2 个答案:

答案 0 :(得分:2)

您在设置S= new student *[size];之前初始化size=10。您应该在使用之前初始化size变量。

答案 1 :(得分:0)

S= new student *[size];
size = 10;

因此,您使用size作为动态分配数组的长度,然后将大小设置为10。那么阵列的大小是多少?好吧,当你使用它时,它是未初始化的并且使用它具有未定义的行为。您需要交换这两行,以便在创建数组时size10