c – 成员函数如何知道为特定对象调用它?
发布时间:2020-12-16 09:38:40 所属栏目:百科 来源:网络整理
导读:有这样的C代码: #include iostreamclass MojaKlasa{public: int z; void fun(){ std::cout this;};};int main(){ MojaKlasa a; a.z = 2; a.fun(); return 0;} 和相应的汇编代码: .file "prog50.cpp" .local _ZStL8__ioinit .comm _ZStL8__ioinit,1,1 .sect
有这样的C代码:
#include <iostream> class MojaKlasa{ public: int z; void fun(){ std::cout << this;}; }; int main() { MojaKlasa a; a.z = 2; a.fun(); return 0; } 和相应的汇编代码: .file "prog50.cpp" .local _ZStL8__ioinit .comm _ZStL8__ioinit,1,1 .section .text._ZN9MojaKlasa3funEv,"axG",@progbits,_ZN9MojaKlasa3funEv,comdat .align 2 .weak _ZN9MojaKlasa3funEv .type _ZN9MojaKlasa3funEv,@function _ZN9MojaKlasa3funEv: .LFB957: .cfi_startproc .cfi_personality 0x0,__gxx_personality_v0 pushl %ebp .cfi_def_cfa_offset 8 movl %esp,%ebp .cfi_offset 5,-8 .cfi_def_cfa_register 5 subl $24,%esp movl 8(%ebp),%eax movl %eax,4(%esp) movl $_ZSt4cout,(%esp) call _ZNSolsEPKv leave ret .cfi_endproc .LFE957: .size _ZN9MojaKlasa3funEv,.-_ZN9MojaKlasa3funEv .text .globl main .type main,@function main: .LFB958: .cfi_startproc .cfi_personality 0x0,-8 .cfi_def_cfa_register 5 andl $-16,%esp subl $32,%esp movl $2,28(%esp) # a.z = 2; leal 28(%esp),(%esp) call _ZN9MojaKlasa3funEv # a.fun(); movl $0,%eax leave ret .cfi_endproc .LFE958: .size main,.-main .type _Z41__static_initialization_and_destruction_0ii,@function _Z41__static_initialization_and_destruction_0ii: .LFB960: .cfi_startproc .cfi_personality 0x0,%esp cmpl $1,8(%ebp) jne .L7 cmpl $65535,12(%ebp) jne .L7 movl $_ZStL8__ioinit,(%esp) call _ZNSt8ios_base4InitC1Ev movl $_ZNSt8ios_base4InitD1Ev,%eax movl $__dso_handle,8(%esp) movl $_ZStL8__ioinit,4(%esp) movl %eax,(%esp) call __cxa_atexit .L7: leave ret .cfi_endproc .LFE960: .size _Z41__static_initialization_and_destruction_0ii,.-_Z41__static_initialization_and_destruction_0ii .type _GLOBAL__I_main,@function _GLOBAL__I_main: .LFB961: .cfi_startproc .cfi_personality 0x0,%esp movl $65535,4(%esp) movl $1,(%esp) call _Z41__static_initialization_and_destruction_0ii leave ret .cfi_endproc .LFE961: .size _GLOBAL__I_main,.-_GLOBAL__I_main .section .ctors,"aw",@progbits .align 4 .long _GLOBAL__I_main .weakref _ZL20__gthrw_pthread_oncePiPFvvE,pthread_once .weakref _ZL27__gthrw_pthread_getspecificj,pthread_getspecific .weakref _ZL27__gthrw_pthread_setspecificjPKv,pthread_setspecific .weakref _ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_,pthread_create .weakref _ZL20__gthrw_pthread_joinmPPv,pthread_join .weakref _ZL21__gthrw_pthread_equalmm,pthread_equal .weakref _ZL20__gthrw_pthread_selfv,pthread_self .weakref _ZL22__gthrw_pthread_detachm,pthread_detach .weakref _ZL22__gthrw_pthread_cancelm,pthread_cancel .weakref _ZL19__gthrw_sched_yieldv,sched_yield .weakref _ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t,pthread_mutex_lock .weakref _ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t,pthread_mutex_trylock .weakref _ZL31__gthrw_pthread_mutex_timedlockP15pthread_mutex_tPK8timespec,pthread_mutex_timedlock .weakref _ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t,pthread_mutex_unlock .weakref _ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t,pthread_mutex_init .weakref _ZL29__gthrw_pthread_mutex_destroyP15pthread_mutex_t,pthread_mutex_destroy .weakref _ZL30__gthrw_pthread_cond_broadcastP14pthread_cond_t,pthread_cond_broadcast .weakref _ZL27__gthrw_pthread_cond_signalP14pthread_cond_t,pthread_cond_signal .weakref _ZL25__gthrw_pthread_cond_waitP14pthread_cond_tP15pthread_mutex_t,pthread_cond_wait .weakref _ZL30__gthrw_pthread_cond_timedwaitP14pthread_cond_tP15pthread_mutex_tPK8timespec,pthread_cond_timedwait .weakref _ZL28__gthrw_pthread_cond_destroyP14pthread_cond_t,pthread_cond_destroy .weakref _ZL26__gthrw_pthread_key_createPjPFvPvE,pthread_key_create .weakref _ZL26__gthrw_pthread_key_deletej,pthread_key_delete .weakref _ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t,pthread_mutexattr_init .weakref _ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti,pthread_mutexattr_settype .weakref _ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t,pthread_mutexattr_destroy .ident "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5" .section .note.GNU-stack,"",@progbits >似乎MojaKlasa类的函数fun()被翻译为普通的常规函数??.函数如何知道为特定对象调用它,例如a.fun() – >为对象a调用fun()? 解决方法
函数如何知道为特定对象调用它,例如a.fun() – >为对象a调用fun()?
指向对象的指针隐含地作为第一个隐藏参数传递给成员函数. MojaKlasa类的默认构造函数和析构函数在哪里? C原则是:您只需支付使用的费用.除非你的代码明确需要一个默认的无参数构造函数,否则编译器就不会生成它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |