Student类和ArrayOfStudents类(动态数组类)

【问题描述】
设计并测试名为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;
}
原文地址:https://www.cnblogs.com/yuzilan/p/10626147.html