曲径通幽论坛

标题: 对象的指针 [打印本页]

作者: beyes    时间: 2011-8-13 17:51
标题: 对象的指针
可以直接访问对象,直接访问对象时使用点运算符;也可以通过指针来访问对象。示例程序如下:
[C++] 纯文本查看 复制代码

#include <iostream>
using namespace std;

class P_example {
    int num;
public:
    void set_num(int val) { num = val; }
    void show_num();
};


void P_example::show_num()
{
    cout << num << "\n";
}


int main()
{
    P_example ob, *p;    //声明一个对象和一个对象指针
   
    ob.set_num(10);
    ob.show_num();


    p = &ob;   //将对象 ob 的地址赋给指针 p
    p->show_num();
    p->set_num(20);  //通过指针调用对象中的函数修改对象中的成员变量值
    p->show_num();
    ob.show_num();


    return 0;
}

运行输出:
$ ./pclass
10
10
20
20
和获得其他类型变量地址一样,对象 ob 也是通过 & 运算符来获取自己的地址。

指针在做自加或自减运算时,会指向下一个或上一个变量;对象的指针也是一样,在自加或自减时会指向下一个或上一个对象。下面是示例代码:
[C++] 纯文本查看 复制代码

#include <iostream>
using namespace std;

class P_example {
    int num;
public:
    void set_num(int val) { num = val; }
    void show_num();
};

void P_example::show_num()
{
    cout << num << "\n";
}

int main()
{
    P_example ob[2], *p;    //创建一个对象数组
   
    ob[0].set_num(10);    //直接访问对象
    ob[1].set_num(20);

    p = &ob[0];   
    p->show_num();

    p++;
    p->show_num();

    p--;
    p->show_num();


    return 0;
}

运行输出:
$ ./pclass2
10
20
10
由于数组名是对象数组的首地址,和第一个对象元素的地址相同,所以 p = &ob[0]; 也可以写成 p = ob;  




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2