我想打印两个类的对象数组。我有班级学生作为Base
班级,CS_student
,IS_student
派生班级,我有一个学生类型的数组,我想在班级大学的打印功能中打印它。< / p>
我想要3个选项:
但它只打印一个对象。这是我的代码
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 :(得分:2)
您在设置S= new student *[size];
之前初始化size=10
。您应该在使用之前初始化size
变量。
答案 1 :(得分:0)
S= new student *[size];
size = 10;
因此,您使用size
作为动态分配数组的长度,然后将大小设置为10
。那么阵列的大小是多少?好吧,当你使用它时,它是未初始化的并且使用它具有未定义的行为。您需要交换这两行,以便在创建数组时size
为10
。