2017年計(jì)算機(jī)等級(jí)考試二級(jí)C++輔導(dǎo):this指針與另一種“多態(tài)”

字號(hào):


    一、 引入
    定義一個(gè)類(lèi)的對(duì)象,首先系統(tǒng)已經(jīng)給這個(gè)對(duì)象分配了空間,然后會(huì)調(diào)用構(gòu)造函數(shù)。一個(gè)類(lèi)有多個(gè)對(duì)象,當(dāng)程序中調(diào)用對(duì)象的某個(gè)函數(shù)時(shí),有可能要訪問(wèn)到這個(gè)對(duì)象的成員變量。而對(duì)于同一個(gè)類(lèi)的每一個(gè)對(duì)象,都是共享同一份類(lèi)函數(shù)。對(duì)象有單獨(dú)的變量,但是沒(méi)有單獨(dú)的函數(shù),所以當(dāng)調(diào)用函數(shù)時(shí),系統(tǒng)必須讓函數(shù)知道這是哪個(gè)對(duì)象的操作,從而確定成員變量是哪個(gè)對(duì)象的。這種用于對(duì)成員變量歸屬對(duì)像進(jìn)行區(qū)分的東西,就叫做this指針。事實(shí)上它就是對(duì)象的地址,這一點(diǎn)從反匯編出來(lái)的代碼可以看到。
    二、分析
    1、測(cè)試代碼:
    view sourceprint?///////////////////////////////////////////////////
    #include
    using namespace std;
    /////////////////////////////////////////////////////
    class A
    {
    public:
    A(char *szname)
    {
    cout<<"construct"<
    name = new char[20];
    strcpy(name, szname);
    }
    ~A()
    {
    cout<<"destruct"<
    delete name;
    }
    void show();
    private:
    char *name;
    };
    /////////////////////////////////////////////////////
    void A::show()
    {
    cout<<"name = "<
    }
    /////////////////////////////////////////////////////
    int main()
    {
    A a("zhangsan");
    a.show();
    system("pause");
    return 0;
    }