看过

时间:2008-06-20 13:46:28   来源:论坛整理  作者:  编辑:chinaitzhe
3.6 指向数据成员的指针。

文中说取一个数据成员的地址的意思是获得该成员在类对象中的偏移量
接着举了个例子:

printf("&Point3::x = %p\n", &Point3::x);
..............

要害是他之前给出的Point3的定义是:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/



class Point3

{

public:

    virtual ~Point3();

protected:

    float x, y, z;

};



这里x,y,z都是保护成员,他怎么能&Point3::x这样用的??
网友回复:printf("&Point3::x = %p\n", &Point3::x);
出现在哪儿?

在可以访问到Point3的protected成员的地方当然可以这样用
网友回复:就是那段话的中间嘛。。。很希奇。
网友回复:建议不要深究这个问题
他这样用,就假设能访问

抓住他想要说明的问题
网友回复:精神可嘉,牛角尖就别专了
网友回复:是啊,人家又没说不管把那个printf写在哪里都可以。
网友回复:既然这样,那就这样吧。。

这本书唯一不好的地方就是排版,有点凑纸张的嫌疑。
都是第7次印刷了,咋就不改下。
网友回复:他想表达的主要是意思就是非静态成员的指针,有可能只是个偏移量而已,不是真正的指针。
或许例子用的不太好。
网友回复:那上面的老大能不能搞个好点例子我看下。
网友回复:都是public的,呵呵,访问限制更少了

C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





class Point3

{

public:

    virtual ~Point3();



public:

    float x, y, z;

};




网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





#include <stdio.h>



class Point3

{

public:

    virtual ~Point3(){}

protected:

    float x, y, z;

};



class Point4:public Point3

{

public:

    void show() const

    {

       printf("&Point3::x = %p\n", &Point3::x);

    }

};



int main()

{

    Point4 p4;

    p4.show();

    return 0;

}




例子
网友回复:没讲明白吧....

你就认为在可访问区了...
网友回复:这里关注的就是数据成员的指针代表某成员在类对象中的偏移量
关键字:看过,Inside,Object,Model,进来,
上一篇:size of 的用法

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面