曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 2733|回复: 0
打印 上一主题 下一主题

对象的指针

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2011-8-13 17:51:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可以直接访问对象,直接访问对象时使用点运算符;也可以通过指针来访问对象。示例程序如下:
[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;  
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-17 23:13 , Processed in 0.076068 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表