zoukankan      html  css  js  c++  java
  • 【原创】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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    This is a thoughtful essay
    MSSQL 模糊搜索全文(过程、函数、触发器等)
    MSSQL 高并发下生成连续不重复的订单号
    MSSQL sql numeric转字符串显示不补0
    iOS 开发之UIStackView的应用
    Java day 5
    Java day 4
    Java day 3-1
    Java day 3
    Java day 2
  • 原文地址:https://www.cnblogs.com/cfas/p/14370604.html
Copyright © 2011-2022 走看看