免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: dream-girl
打印 上一主题 下一主题

[函数] 构造函数? [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
91 [报告]
发表于 2004-12-28 08:53 |只看该作者

构造函数?

to playmud:
你给的汇编码能看到你需要的结果的吗?你需要知道的无非是vptr是在构造函数体还是在其它地方初始化是吧.但汇编就是那些指令,而你需要区别的无非是是在大括号之前还是之后,这也能看出来?你想vptr不在构造函数中初始化还有什么地方?

论坛徽章:
0
92 [报告]
发表于 2004-12-28 09:06 |只看该作者

构造函数?

原帖由 "THEBEST" 发表:
呵呵,肯定了就不用讨论?上面多少人不是肯定的在说?
你知道肯定的话多么难说吗?需要多大的胆吗??

哈哈,当时我确实这么认为的,所以我要坚持我的观点,不能支支吾吾的.
如果我对自己的看法还不肯定,那还说个什么劲啊.嘿嘿,坚持自己认为对的,坚决不坚持自己认为不对的.

论坛徽章:
0
93 [报告]
发表于 2004-12-28 09:08 |只看该作者

构造函数?

原帖由 "THEBEST" 发表:
to playmud:
你给的汇编码能看到你需要的结果的吗?你需要知道的无非是vptr是在构造函数体还是在其它地方初始化是吧.但汇编就是那些指令,而你需要区别的无非是是在大括号之前还是之后,这也能看出来?你想vptr不在构造..........

能看到结果,呵呵,其实早看的话早就清楚了,vptr确实是在构造函数刚开始的时候初始化的.偶之前错了.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
94 [报告]
发表于 2004-12-28 09:11 |只看该作者

构造函数?

vptr确实是在构造函数刚开始的时候初始化的
are you sure?

论坛徽章:
0
95 [报告]
发表于 2004-12-28 09:22 |只看该作者

构造函数?

[quote]原帖由 "THEBEST"]re you sure?[/quote 发表:



  1. #include <iostream>;

  2. using namespace std;
  3. class A
  4. {
  5. public:
  6.     A(){
  7.         int j=1;
  8.          size();
  9.     }
  10.     virtual void size(){cout<<sizeof(A)<<endl;}   
  11. };

  12. int main()
  13. {
  14.     A b;
  15.     system("pause");
  16. }
复制代码

上面的代码
下面的汇编

  1. push ebp
  2. mov ebp ,esp
  3. sub esp ,0x8
  4. mov eax ,DWORD PTR[ebp+8]
  5. mov DWORD PTR[eax],0x4360cc
  6. mov DWORD PTR[ebp-4],0x1

复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
96 [报告]
发表于 2004-12-28 09:29 |只看该作者

构造函数?

举个简单的含virtual function的例子就sure了?
能否来个virtual inheritance的例子也分析一下?更复杂的?

论坛徽章:
0
97 [报告]
发表于 2004-12-28 09:30 |只看该作者

构造函数?


  1. #include <iostream>;

  2. using namespace std;
  3. class A
  4. {
  5. public:
  6.     A(){
  7.         int j=1;
  8.          size();
  9.     }
  10.     virtual void size(){cout<<sizeof(A)<<endl;}   
  11. };

  12. int main()
  13. {
  14.     A b;
  15.     int addr;
  16.     memcpy(&addr,&b,4);
  17.     cout<<(void *)addr<<endl;
  18.     system("pause");
  19. }
复制代码

改了一下代码,vptr位于类对象的顶端.
可以看到:
4
0x4360cc
请按任意键继续 . . .
和上面汇编的内容一样.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
98 [报告]
发表于 2004-12-28 09:32 |只看该作者

构造函数?

举个简单的含virtual function的例子就sure了?
能否来个virtual inheritance的例子也分析一下?更复杂的?

论坛徽章:
0
99 [报告]
发表于 2004-12-28 09:33 |只看该作者

构造函数?

原帖由 "THEBEST" 发表:
举个简单的含virtual function的例子就sure了?
能否来个virtual inheritance的例子也分析一下?更复杂的?

最开始的汇编代码就是有虚函数的继承,虚拟继承和虚函数关系不大吧.

论坛徽章:
0
100 [报告]
发表于 2004-12-28 11:47 |只看该作者

构造函数?

vptr是在构造函数中,在基类的构造函数执行之后,在成员对象初始化和构造函数执行体之前初始化的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP