• 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;
    }
    
  • 相关阅读:
    SpringMVC中web.xml中url配置路径 / 和 /* 的区别
    spring mvc @RequestMapping method 不写的话,默认GET、POST都支持,根据前端方式自动适应
    MyBatis项目所引用的一切依赖jar包和自定义设置
    Python 代码性能优化技巧
    linux basic commands
    linuxx virutal machine installation
    安装 Django
    virtualenv (isolated virtual environment) for python runtime
    夜间模式的开启与关闭,父模板的制作
    完成登录与注册页面的前端
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626147.html
Copyright © 2020-2023  润新知