Я хочу напечатать массив объектов двух классов. У меня классный класс как Base
класс и CS_student
, IS_student
производные классы, и у меня есть массив студентов типа, и я хочу напечатать его в функции печати университетского класса.
Я хочу 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";
}
}
}
}
};
Вы инициализируете S= new student *[size];
перед установкой size=10
. Перед использованием вы должны инициализировать переменную size
.
if(obj2){...}
проверка if(obj2){...}
программу? Есть ли какая-то конкретная причина, по которой вы их привели?
S= new student *[size];
size = 10;
Таким образом, вы используете size
как длину динамически распределенного массива, а затем задаете размер 10
. Какой размер массива? Хорошо, когда вы использовали его, он был неинициализирован, и использование его имело неопределенное поведение. Вам нужно поменять местами эти две строки так, чтобы size
равен 10
при создании массива.
S = new student *[size]; size = 10;
делает?if(obj2){...}
? Это сбой? Тогда я предполагаю, что в вашем массиве есть нулевые указатели.