【原创】C语言面向对象,this call C语言实现class

#include <stdio.h>
#include <stdlib.h>







typedef struct user_t
{
    int t;
    char *userName;
    void (*setUserName)(char* name,int);
    void (*print)();

    
}UserT;









/*重点在这里*/
#define THIS_CALL     
int ex;
{_asm mov ecx, ebp}
{_asm sub eax, ecx}
{_asm sub eax, 4h}
{_asm mov ecx, eax}
{_asm mov eax, ebp}
{_asm go_sub :}
{_asm add eax, 4}
{_asm sub ecx, 4h}
{_asm jg go_sub}
{_asm mov ecx, esp}
{_asm mov esp, eax}
{_asm pop eax}
{_asm mov ex, eax}
{_asm mov esp, ecx}



#define FUNC(Type,f,arg) f##arg {
THIS_CALL 
Type this;
this = (Type)ex;


//GO语言定义方式
#define func(Type,f,arg,rt) rt f##arg {
THIS_CALL 
Type this;
this = (Type)ex;



func (UserT*, setUserNamae, (char *name, int a),void)
    this->userName = name;
    this->userName = name;
}


func (UserT*, print, (), void)
    printf("%s
", this->userName);
}





#define CALL_S(e)
size_t addr = e; 
{_asm mov eax, esp}
{_asm push addr}


#define $$(e) {CALL_S(e);} (0,
e)

void initUser(struct  user_t* u) {
    u->setUserName = setUserNamae;
    u->print = print;
}




int main() {

    struct  user_t User;initUser(&User);
    $$(&User)->setUserName("张飞", 2);
    $$(&User)->print();
    while (1){}
}

博主长期对外收徒,欢迎咨询。
《编程语言设计和实现》《MUD游戏开发》《软件破解和加密》《游戏辅助外挂》《JAVA开发》 以上课程非诚勿扰!



=================================
QQ:184377367
GOLang Q群:6848027
电子电路入门群 436173132
C/C++/QT群 1414577
单片机嵌入式群 306312845
MUD/LIB/巫师交流群 391486684
java/springboot/hadoop/ 群 4915800
WEB前端开发交流群 214737701
操作系统研发群:15375777
Linux公社Q群:812742841
汇编/辅助/破解新手群:755783453
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/cfas/p/14370604.html