美文网首页
学生类——读写学生的信息

学生类——读写学生的信息

作者: 我喜欢蓝色儿 | 来源:发表于2018-10-26 09:50 被阅读0次
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    class T
    {
    private:
        char *id,*name;
    public:
        T(const char *p,const char *q)  //构造函数
        {
            id=new char[strlen(p)+1];
            name=new char[strlen(q)+1];  //分配动态内存
            strcpy(id,p);
            strcpy(name,q);  //赋初值
        }
        ~T(){    //析构函数
            delete id;
            delete name;    //删除分配的内存
        }
        void getid(char *p){
            strcpy(id,p);
        } 
        void getname(char *q){   //两个 写入 函数
            strcpy(name,q);
        } 
        char *showid(){ 
            return id;
        } 
        char *showname(){   //两个 读取 函数
            return name;
        } 
    };
    
    int main()
    {
        T s("20172201","HJS");
        cout<<"学号:"<<s.showid()<<endl;
        cout<<"姓名:"<<s.showname()<<endl;
        char p[80],q[80];
        cin>>p>>q;
        s.getid(p);
        s.getname(q);
        cout<<"学号:"<<s.showid()<<endl;
        cout<<"姓名:"<<s.showname()<<endl;
        return 0;   
    }
    
    运行结果

    C++课上的一道快速编程训练的题目,因为当初也没有写出来,而且可能与期末考试有关,所以拿来分析一下。
    题目大概是(老师口述):定义一个学生类,私有成员有两个——学号和姓名,每一个信息都需要读和写,所以这里需要四个成员函数,加上构造,析构函数,共有6个成员函数。且要求在主函数中cin和cout。
    因为之前课上讲的几个代码都是在成员函数中进行cout,所以听到题后,我有些懵圈,不知道如何在主函数中cout(主要还是太受之前知识的限制了,一直没有跳出在成员函数中cout的怪圈)。
    当时还纠结了另一个问题,就是如何cin。因为有构造函数,所以在类定义一个对象后要进行赋初值操作,然而既然已经赋了初值,干嘛还要cin,或者说如何在主函数中cin,又能把值传给私有成员呢。
    所以我最后就写了一个功能十分残缺的代码。叨叨完后,我来分析一下这个代码。
    1、构造函数
    因为私有成员定义了两个字符型的指针,但是没有指向,或是内存分配。所以在构造函数中实现赋值操作前要进行内存分配工作:p=new char[n]。然后就可以写赋初值的代码了:把实参的值传给私有成员。
    2、析构函数
    析构函数不需要调用,在对象使用完毕后,做清理工作,释放系统为对象(自动调用过构造函数)分配的资源。delete用于释放分配的动态内存。
    3、写入函数
    在主函数中cin学生的信息,需要把值传给私有成员,所以需要一个函数进行这项工作。功能简洁清楚,函数体为:把形参值传给私有成员即可。
    4、读取函数
    在主函数中cout,所以需要一个函数用来传递私有成员,使其在主函数中输出。所以函数体很自然的想到了用return实现,即返回一个值。另:因为私有成员定义的是字符指针,所以需要声明一个指针函数,返回值为字符指针的首地址。
    5、关于编写代码中的编译一直报错情况:



    是因为如果构造函数中的形参表中并不是const char *,而是char *,它表示了一个可改变的字符串,即字符变量,但是主函数中定义对象时赋的初值为字符常量,所以产生了矛盾。

    相关文章

      网友评论

          本文标题:学生类——读写学生的信息

          本文链接:https://www.haomeiwen.com/subject/zstktqtx.html