學(xué)生類(lèi)——讀寫(xiě)學(xué)生的信息

#include <iostream>
#include <cstring>
using namespace std;

class T
{
private:
    char *id,*name;
public:
    T(const char *p,const char *q)  //構(gòu)造函數(shù)
    {
        id=new char[strlen(p)+1];
        name=new char[strlen(q)+1];  //分配動(dòng)態(tài)內(nèi)存
        strcpy(id,p);
        strcpy(name,q);  //賦初值
    }
    ~T(){    //析構(gòu)函數(shù)
        delete id;
        delete name;    //刪除分配的內(nèi)存
    }
    void getid(char *p){
        strcpy(id,p);
    } 
    void getname(char *q){   //兩個(gè) 寫(xiě)入 函數(shù)
        strcpy(name,q);
    } 
    char *showid(){ 
        return id;
    } 
    char *showname(){   //兩個(gè) 讀取 函數(shù)
        return name;
    } 
};

int main()
{
    T s("20172201","HJS");
    cout<<"學(xué)號(hào):"<<s.showid()<<endl;
    cout<<"姓名:"<<s.showname()<<endl;
    char p[80],q[80];
    cin>>p>>q;
    s.getid(p);
    s.getname(q);
    cout<<"學(xué)號(hào):"<<s.showid()<<endl;
    cout<<"姓名:"<<s.showname()<<endl;
    return 0;   
}
運(yùn)行結(jié)果

C++課上的一道快速編程訓(xùn)練的題目,因?yàn)楫?dāng)初也沒(méi)有寫(xiě)出來(lái),而且可能與期末考試有關(guān),所以拿來(lái)分析一下。
題目大概是(老師口述):定義一個(gè)學(xué)生類(lèi),私有成員有兩個(gè)——學(xué)號(hào)和姓名,每一個(gè)信息都需要讀和寫(xiě),所以這里需要四個(gè)成員函數(shù),加上構(gòu)造,析構(gòu)函數(shù),共有6個(gè)成員函數(shù)。且要求在主函數(shù)中cin和cout。
因?yàn)橹罢n上講的幾個(gè)代碼都是在成員函數(shù)中進(jìn)行cout,所以聽(tīng)到題后,我有些懵圈,不知道如何在主函數(shù)中cout(主要還是太受之前知識(shí)的限制了,一直沒(méi)有跳出在成員函數(shù)中cout的怪圈)。
當(dāng)時(shí)還糾結(jié)了另一個(gè)問(wèn)題,就是如何cin。因?yàn)橛袠?gòu)造函數(shù),所以在類(lèi)定義一個(gè)對(duì)象后要進(jìn)行賦初值操作,然而既然已經(jīng)賦了初值,干嘛還要cin,或者說(shuō)如何在主函數(shù)中cin,又能把值傳給私有成員呢。
所以我最后就寫(xiě)了一個(gè)功能十分殘缺的代碼。叨叨完后,我來(lái)分析一下這個(gè)代碼。
1、構(gòu)造函數(shù)
因?yàn)樗接谐蓡T定義了兩個(gè)字符型的指針,但是沒(méi)有指向,或是內(nèi)存分配。所以在構(gòu)造函數(shù)中實(shí)現(xiàn)賦值操作前要進(jìn)行內(nèi)存分配工作:p=new char[n]。然后就可以寫(xiě)賦初值的代碼了:把實(shí)參的值傳給私有成員。
2、析構(gòu)函數(shù)
析構(gòu)函數(shù)不需要調(diào)用,在對(duì)象使用完畢后,做清理工作,釋放系統(tǒng)為對(duì)象(自動(dòng)調(diào)用過(guò)構(gòu)造函數(shù))分配的資源。delete用于釋放分配的動(dòng)態(tài)內(nèi)存。
3、寫(xiě)入函數(shù)
在主函數(shù)中cin學(xué)生的信息,需要把值傳給私有成員,所以需要一個(gè)函數(shù)進(jìn)行這項(xiàng)工作。功能簡(jiǎn)潔清楚,函數(shù)體為:把形參值傳給私有成員即可。
4、讀取函數(shù)
在主函數(shù)中cout,所以需要一個(gè)函數(shù)用來(lái)傳遞私有成員,使其在主函數(shù)中輸出。所以函數(shù)體很自然的想到了用return實(shí)現(xiàn),即返回一個(gè)值。另:因?yàn)樗接谐蓡T定義的是字符指針,所以需要聲明一個(gè)指針函數(shù),返回值為字符指針的首地址。
5、關(guān)于編寫(xiě)代碼中的編譯一直報(bào)錯(cuò)情況:



是因?yàn)槿绻麡?gòu)造函數(shù)中的形參表中并不是const char *,而是char *,它表示了一個(gè)可改變的字符串,即字符變量,但是主函數(shù)中定義對(duì)象時(shí)賦的初值為字符常量,所以產(chǎn)生了矛盾。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,676評(píng)論 1 51
  • 題目類(lèi)型 a.C++與C差異(1-18) 1.C和C++中struct有什么區(qū)別? C沒(méi)有Protection行為...
    阿面a閱讀 7,891評(píng)論 0 10
  • 重新系統(tǒng)學(xué)習(xí)下C++;但是還是少了好多知識(shí)點(diǎn);socket;unix;stl;boost等; C++ 教程 | 菜...
    kakukeme閱讀 20,455評(píng)論 0 50
  • C++ Primer Plus C++,貝爾實(shí)驗(yàn)室Bjarne Stroustrup設(shè)計(jì)的編程語(yǔ)言。C++ Pri...
    gb_QA_log閱讀 1,418評(píng)論 0 1
  • 【畫(huà)者的基本信息】 畫(huà)者是一位男,25歲,大學(xué)剛畢業(yè),才入職。讓他畫(huà)一棵果樹(shù),結(jié)果沒(méi)想到他畫(huà)了一個(gè)樹(shù)墩。 一【畫(huà)面...
    生活從改變開(kāi)始閱讀 216評(píng)論 0 0

友情鏈接更多精彩內(nèi)容