打印对象数组
Print array of objects
我想打印两个类的对象数组。我有班学生作为班级Base
,CS_student
,IS_student
派生的班级,我有一个类型学生数组,我想在班级大学的打印功能中打印它。
我想要 3 个选项:
- 打印所有CS_student。
- 打印所有IS_student。
- 打印所有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";
}
}
}
}
};
您在设置size=10
之前正在初始化S= new student *[size];
。您应该在使用size
变量之前对其进行初始化。
S= new student *[size];
size = 10;
因此,您使用size
作为动态分配的数组的长度,然后将 size 设置为 10
。那么阵列的大小是多少?当你使用它时,它是未初始化的,使用它有未定义的行为。您需要交换这两行,以便在创建数组时10
size
。
相关文章:
- 销毁C++中动态分配的内存(数组对象)
- 数组对象的生存期是否在重用其元素存储时结束?
- 为什么顶点数组对象会导致错误?
- 具有纯虚函数和指针数组对象类型的父类的指针数组
- 这是使用构造函数初始化数组对象的最佳方法吗?
- OpenGL 顶点数组对象与 tinyobjloader
- 将数组/对象/结构列表从C#库中传递给C MFC应用程序
- C++ RapidJson 帮助反序列化数组对象
- ptrdiff_t可以表示指向同一数组对象元素的指针的所有减法吗?
- 检查成员函数是否返回临时对象或数组对象
- 为什么 std::variant 不能容纳数组对象类型,而联合可以?
- 当数组对象以函数参数传递时,为什么复制构造函数会自称
- 如何使用箭头指针打印出一类数组对象,这些对象中有多个分数
- C++17 std::shared_ptr<> 类数组对象的重载运算符 []
- 添加两个具有运算符重载的数组对象,从而导致分段错误
- opengl:两个不同的矢量可以绑定到同一个顶点数组对象吗
- 使用相同的数据填充数组对象或使用指针
- 方法用于最快的分配,并且不需要将动态大小的数组对象作为局部变量
- 如何将2d数组对象传递给c++中的函数
- ReferenceTable溢出(jni-android),数组对象释放