免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1077 | 回复: 1
打印 上一主题 下一主题

贴一个比较怪异的类 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-06 11:34 |只看该作者 |倒序浏览

  1. class B;

  2. class A
  3. {
  4. public:
  5.         A( B& _b ): b( _b )
  6.         {
  7.                 printf( "%i\n", ++no );
  8.         }

  9.         virtual ~A()
  10.         {
  11.                 printf( "ok %i\n", no-- );
  12.         }

  13.         B& b;
  14.         static int no;
  15. };
  16. int A::no = 0;

  17. class B: public A
  18. {
  19. public:
  20.         B(): A( *this )
  21.         {
  22.                 i = 0;
  23.         }

  24.         int i;
  25. };

  26. int main( int argc, char* argv[] )
  27. {
  28.         B b;
  29.         A a( b );
  30.         printf( "%p %p %p\n", &b, &a.b, &b.b.b );
  31.         return 0;
  32. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2007-06-06 12:20 |只看该作者
LZ的问题是什么?是想问为什么地址值相同吗?
如果是的话,那么执行一下下面一段代码.

  1. #include <cstdio>

  2. int main()
  3. {
  4.         int a;
  5.         int& b = a;

  6.         printf("%p, %p\n", &a, &b);
  7.         return 0;
  8. }
复制代码


前段时间思一克贴过一个关于c++引用的讨论,你搜一下.
引用并不创建新的对象,仅仅是一个别名.对引用进行取地址操作,返回的是所引用的对象的地址.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP