【问题描述】
设计并测试名为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>
#include <cstring>
using namespace std;
class Student
{
private:
char *name;
char *id;
int grade;
public:
Student(const char *n="***",char *i="000",int g=0);//默认构造函数
~Student(){delete [] name; delete [] id;}//析构函数(因为构造函数用了new,所以加一个带delete的析构函数释放空间)
void setValues(const char *n="***",char *i="000",int g=0);//完成三个属性值的初始化
void output();//输出
};
Student::Student(const char *n,char *i,int g)//默认构造函数
{
//不能简单的写name=n,这样子name没有自己的资源空间,而是指向了一个局部变量空间,如果代码复杂会出问题
int len1 = strlen(n);
name = new char[len1+1];
strcpy(name,n);
//不能简单的写id=i,这样子id没有自己的资源空间,而是指向了一个局部变量空间,如果代码复杂会出问题
int len2 = strlen(i);
id = new char[len2+1];
strcpy(id,i);
grade = g;
}
void Student::setValues(const char *n,char *i,int g)//完成三个属性值的初始化
{
int len1 = strlen(n);
name = new char[len1+1];
strcpy(name,n);
int len2 = strlen(i);
id = new char[len2+1];
strcpy(id,i);
grade = g;
}
void Student::output()//输出
{
cout << "Name:" << name << " id:" << id << " grade:" << grade << endl;
}
class ArrayOfStudents
{
private:
Student *s;
int len;
public:
//基本函数
ArrayOfStudents(int count);//构造函数
~ArrayOfStudents();//析构函数
//功能函数
Student & element(int i);//能够取出第i个对象,并对其属性值进行修改
};
ArrayOfStudents::ArrayOfStudents(int count)//构造函数
{
len = count;
s = new Student[len+1];
}
ArrayOfStudents::~ArrayOfStudents()//析构函数
{
delete []s;
cout<<"Deleting..."<<endl;
}
Student & ArrayOfStudents::element(int i)//能够取出第i个对象,并对其属性值进行修改
{
return s[i];
}
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;
}