国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
淺談C++中的對(duì)象指針和對(duì)象引用
指向類的成員的指針

    在C++中,可以說(shuō)明指向類的數(shù)據(jù)成員和成員函數(shù)的指針

    指向數(shù)據(jù)成員的指針格式如下:

    <類型說(shuō)明符><類名>::*<指針名>

    指向成員函數(shù)的指針格式如下:

    <類型說(shuō)明符>(<類名>::*<指針名>)(<參數(shù)表>)

    例如,設(shè)有如下一個(gè)類A:

    class A
    {
    public:
        int fun (int b) { return a*c+b; }
        A(int i) { a=i; }
        int c;
    private:
         int a;
    };

    定義一個(gè)指向類A的數(shù)據(jù)成員c的指針pc,其格式如下:

    int A:: *pc = &A::c;

    再定義一個(gè)指向類A的成員函數(shù)fun的指針pfun,其格式如下:

    int (A:: *pfun)(int) = A::fun;

    由于類不是運(yùn)行時(shí)存在的對(duì)象。因此,在使用這類指針時(shí),需要首先指定A類的一個(gè)對(duì)象,然后,通過(guò)對(duì)象來(lái)引用指針?biāo)赶虻某蓡T。例如,給pc指針?biāo)赶虻臄?shù)據(jù)成員c賦值8,可以表示如下:

    A a;
    a.*pc = 8;

    其中,運(yùn)算符.*是用來(lái)對(duì)指向類成員的指針來(lái)操作該類的對(duì)象的。

    如果使用指向?qū)ο蟮闹羔榿?lái)對(duì)指向類成員的指針進(jìn)行操作時(shí),使用運(yùn)算符->*。例如:

    A *p = &a;    //a是類A的一個(gè)對(duì)象,p是指向?qū)ο骯的指針。
    p ->* pc = 8;

    讓我們?cè)倏纯粗赶?font color="#0000ff">一般函數(shù)的指針的定義格式:

    <類型說(shuō)明符>*<指向函數(shù)指針名>(<參數(shù)表>)

    關(guān)于給指向函數(shù)的指針賦值的格式如下:

    <指向函數(shù)的指針名>=<函數(shù)名>

    關(guān)于在程序中,使用指向函數(shù)的指針調(diào)用函數(shù)的格式如下:

    (*<指向函數(shù)的指針名>)(<實(shí)參表>)

    如果是指向類的成員函數(shù)的指針還應(yīng)加上相應(yīng)的對(duì)象名和對(duì)象成員運(yùn)算符。

    下面給出一個(gè)使用指向類成員指針的例子:

    #include <iostream.h>
    class A
    {
    public:
    A(int i) { a=i; }
    int fun(int b) { return a*c+b; }
    int c;
    private:
    int a;
    };

    void main()
    {
    A x(8);        //定義類A的一個(gè)對(duì)象x
    int A::*pc;    //定義一個(gè)指向類數(shù)據(jù)成員的指針pc
    pc=&A::c;    //給指針pc賦值
    x.*pc=3;    //用指針方式給類成員c賦值為3
    int (A::*pfun)(int);    //定義一個(gè)指向類成員函數(shù)的指針pfun
    pfun=A::fun;        //給指針pfun賦值
    A *p=&x;        //定義一個(gè)對(duì)象指針p,并賦初值為x
    cout<<(p->*pfun)(5)<<endl;    //用對(duì)象指針調(diào)用指向類成員函數(shù)指針pfun指向的函數(shù)
    }

    以上程序定義了好幾個(gè)指針,雖然它們都是指針,但是所指向的對(duì)象是不同的。p是指向類的對(duì)象;pc是指向類的數(shù)據(jù)成員;pfun是指向類的成員函數(shù)。因此它們的值也是不相同的。

對(duì)象指針和對(duì)象引用作函數(shù)的參數(shù)

    1. 對(duì)象指針作函數(shù)的參數(shù)

    使用對(duì)象指針作為函數(shù)參數(shù)要經(jīng)使用對(duì)象作函數(shù)參數(shù)更普遍一些。因?yàn)槭褂脤?duì)象指針作函數(shù)參數(shù)有如下兩點(diǎn)好處:

    (1) 實(shí)現(xiàn)傳址調(diào)用。可在被調(diào)用函數(shù)中改變調(diào)用函數(shù)的參數(shù)對(duì)象的值,實(shí)現(xiàn)函數(shù)之間的信息傳遞。

    (2) 使用對(duì)象指針實(shí)參僅將對(duì)象的地址值傳給形參,而不進(jìn)行副本的拷貝,這樣可以提高運(yùn)行效率,減少時(shí)空開銷。

    當(dāng)形參是指向?qū)ο笾羔槙r(shí),調(diào)用函數(shù)的對(duì)應(yīng)實(shí)參應(yīng)該是某個(gè)對(duì)象的地址值,一般使用&后加對(duì)象名。下面舉一例子說(shuō)明對(duì)象指針作函數(shù)參數(shù)。

    #include <iostream.h>
    class M
    {
    public:
        M() { x=y=0; }
        M(int i, int j) { x=i; y=j; }
        void copy(M *m);
        void setxy(int i, int j) { x=i; y=j; }
        void print() { cout<<x<<","<<y<<endl; }
    private:
        int x, y;
    };

    void M::copy(M *m)
    {
    x=m->x;
    y=m->y;
    }

    void fun(M m1, M *m2);
    void main()
    {
    M p(5, 7), q;
    q.copy(&p);
    fun(p, &q);
    p.print();
    q.print();
    }

    void fun(M m1, M *m2)
    {
    m1.setxy(12, 15);
    m2->setxy(22,25);
    }

    輸出結(jié)果為:

    5,7
    22,25

    從輸出結(jié)果可以看出,當(dāng)在被調(diào)用函數(shù)fun中,改變了對(duì)象的數(shù)據(jù)成員值[m1.setxy(12, 15)]和指向?qū)ο笾羔樀臄?shù)據(jù)成員值[m2->setxy(22, 25)]以后,可以看到只有指向?qū)ο笾羔樧鲄?shù)所指向的對(duì)象被改變了,而另一個(gè)對(duì)象作參數(shù),形參對(duì)象值改變了,可實(shí)參對(duì)象值并沒有改變。因此輸出上述結(jié)果。

    2. 對(duì)象引用作函數(shù)參數(shù)

    在實(shí)際中,使用對(duì)象引用作函數(shù)參數(shù)要比使用對(duì)象指針作函數(shù)更普遍,這是因?yàn)槭褂脤?duì)象引用作函數(shù)參數(shù)具有用對(duì)象指針作函數(shù)參數(shù)的優(yōu)點(diǎn),而用對(duì)象引用作函數(shù)參數(shù)將更簡(jiǎn)單,更直接。所以,在C++編程中,人們喜歡用對(duì)象引用作函數(shù)參數(shù)。現(xiàn)舉一例子說(shuō)明對(duì)象引用作函數(shù)參數(shù)的格式。

    #include <iostream.h>
    class M
    {
    public:
    M() { x=y=0; }
    M(int i, int j) { x=i; y=j; }
    void copy(M &m);
    void setxy(int i, int j) { x=i; y=j; }
    void print() {cout<<x<<","<<y<<endl; }
    private:
    int x, y;
    };

    void M::copy(M &m)
    {
    x=m.x;
    x=m.y;
    }

    void fun(M m1, M &m2);

    void main()
    {
    M p(5, 7), q;
    q.copy(p);
    fun(p, q);
    p.print();
    q.print();
    }

    void fun(M m1, M &m2)
    {
    m1.setxy(12, 15);
    m2.setxy(22, 25);
    }

    該例子與上面的例子輸出相同的結(jié)果,只是調(diào)用時(shí)的參數(shù)不一樣。

this指針

    this指針是一個(gè)隱含于每一個(gè)成員函數(shù)中的特殊指針。它是一個(gè)指向正在被該成員函數(shù)操作的對(duì)象,也就是要操作該成員函數(shù)的對(duì)象。

    當(dāng)對(duì)一個(gè)對(duì)象調(diào)用成員函數(shù)時(shí),編譯程序先將對(duì)象的地址賦給this指針,然后調(diào)用成員函數(shù),每次成員函數(shù)存取數(shù)據(jù)成員時(shí),由隱含作用this指針。而通常不去顯式地使用this指針來(lái)引用數(shù)據(jù)成員。同樣也可以使用*this來(lái)標(biāo)識(shí)調(diào)用該成員函數(shù)的對(duì)象。下面舉一例子說(shuō)明this指針的應(yīng)用。

    #include <iostream.h>
    class A
    {
    public:
    A() { a=b=0; }
    A(int i, int j) { a=i; b=j; }
    void copy(A &aa);    //對(duì)象引用作函數(shù)參數(shù)
    void print() {cout<<a<<","<<b<<endl; }
    private:
    int a, b;
    };

    void A::copy(A &aa)
    {
    if (this == &aa) return;    //這個(gè)this是操作該成員函數(shù)的對(duì)象的地址,在這里是對(duì)象a1的地址
    *this = aa;    //*this是操作該成員函數(shù)的對(duì)象,在這里是對(duì)象a1。
            //此語(yǔ)句是對(duì)象aa賦給a1,也就是aa具有的數(shù)據(jù)成員的值賦給a1的數(shù)據(jù)成員
    }

    void main()
    {
    A a1, a2(3, 4);
    a1.copy(a2);
    a1.print();
    }

    運(yùn)行結(jié)果:

    3, 4
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
“對(duì)象指針”和“對(duì)象引用”作函數(shù)的參數(shù) 及this用法
靜態(tài)成員函數(shù)和非靜態(tài)成員函數(shù)的區(qū)別?
const在函數(shù)前與函數(shù)后的區(qū)別
C++中const用法總結(jié)
this指針
C++常見問(wèn)題解答
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服