【问题描述】
设计并测试名为Student和ArrayOfStudents的类。
Student类说明如下:
(1)有3个私有数据成员name,id,grade,描述属性值
(2)声明3个成员函数,其一默认构造函数,为各属性值设定初始值;其二setValues完成三个属性值的初始化;其三output完成输出。
ArrayOfStudents类说明如下:
(1)声明2个私有数据成员,其一为Student类型的指针;其二为数组长度。
(2)设计1个成员函数element要求能够取出第i个对象,并对其属性值进行修改。
(3)设计构造函数和析构函数,并在构造函数中new空间,析构函数中delete空间,并cout输出提示语句。
main( )函数如下:
int main( ) {
int count;
cin >> count; //请输入学生人数;
ArrayOfStudents stus(count); //创建数组对象
stus.element(0).output();
stus.element(1).output();
stus.element(0).setValues("ZhangSan", "001", 85);
stus.element(1).setValues("Lisi", "002", 90);
stus.element(0).output();
stus.element(1).output();
return 0;
}
【输入形式】
动态数组的长度
【输出形式】
第1,2个数组元素,并输出其修改后的各属性值。
【样例输入】
3
【样例输出】
Name:*** id:000 grade:0
Name:*** id:000 grade:0
Name:ZhangSan id:001 grade:85
Name:Lisi id:002 grade:90
Deleting...
#include<iostream>
using namespace std;
#include<cstring>
class Student{
char name[20],id[20];
int grade;
public:
Student(char nam[]="***",char i[]="000",int x=0)
{
strcpy(name,nam);
strcpy(id,i);
grade=x;
}
void setValues(char nam[],char i[],int x)
{strcpy(name,nam);
strcpy(id,i);
grade=x;
}
void output()
{
cout<<"Name:"<<name<<" id:"<<id<<" grade:"<<grade<<endl;
}
};
class ArrayOfStudents{
Student *str;
int len;
public:
ArrayOfStudents(int c)
{
str=new Student[c];
len=c;
}
Student &element(int i)/如果不+& 结果就是无法setValues;
///返回值为引用就是返回数组地址 返回本身 如果不是引用会另外开辟一块空间储存内存
{
return str[i];
}
~ArrayOfStudents()
{
if(str!=NULL)
{delete []str;
}
str=NULL;
cout<<"Deleting...";
}
};
int main( ) {
int count;
cin >> count; //请输入学生人数;
ArrayOfStudents stus(count); //创建数组对象
stus.element(0).output();
stus.element(1).output();
stus.element(0).setValues("ZhangSan", "001", 85);
stus.element(1).setValues("Lisi", "002", 90);
stus.element(0).output();
stus.element(1).output();
return 0;
}