汇编+c 实现面向对象

 一年半前,还在捣鼓低层编程...怎么想到现在是做架构的呢....保存一下旧贴,以示纪念。
潘星臣=casazaft
admin@wewebos.com
2008.1.8
其实这里只是一个prototype模式,不过用汇编写起来,比较爽!

用C实现面向对象

楼主casazaft() 2006-06-09 20:06:24 在 C/C++ / C++ 语言 提问

首先,定义一个最基本的类,所有的类都必须包含一个基本类  
  typedef   struct   //最基本的类  
  {  
  int   mesize;  
  void   (*create)(void*);//构造函数  
  }   basic_class;  
  写一个new函数  
   
  new.h  
  extern   void*   __cdecl   malloc(unsigned   int);  
  //-------------------------------------------new函数  
  void*   new(void*   father)  
  {  
  void*   p;  
   
  int   i;  
  _asm  
  {  
  mov   eax,father  
   
  mov   ecx,dword   ptr[eax]//获得类大小  
  mov   i,ecx  
   
  }  
   
  p=malloc(i);  
  _asm     //调用父对象默认构造函数  
  {  
   
  mov   eax,father  
   
  push   eax  
   
   
  call   dword   ptr   [eax+4]  
   
  add   esp,4  
   
  }  
  _asm  
  {  
   
  mov   ecx,i   //拷贝父对象结构  
  mov   esi,father  
  mov   edi,p  
  rep   movsb  
  }  
   
  return   p;  
  }  
  //--------------------------------------------------------------------------- 问题点数:50、回复次数:14Top

scrolling="no" frameborder="0" src="http://topic.csdn.net/Include/Board.htm?Tags=">

1 楼casazaft()回复于 2006-06-09 20:11:16 得分 0

例子,写一个student类,先看c++的做法  
  class   student  
  {  
  public:  
  char   name[10];  
  int   age;  
  char   sex[5];  
  student();  
  void   say(char*   sen);  
   
   
  }  
  我用C实现类似的声明:  
  student.h  
  ----------------------------  
  #include   "new.h"  
   
  typedef   struct    
  {  
  char   name[10];  
  int   age;  
  char   sex[10];  
  }Student_data;//--------------------------------------------类数据成员声明  
   
  typedef   struct    
  {  
  void*   (*say)(char*   sen);  
  }Student_method;//------------------------------------------类方法成员声明  
   
  typedef   struct    
  {  
  basic_class   me;  
  Student_data*   data;  
  Student_method*   method;  
  }Student;           //-------------------------------------------类声明  
   
  //------------------------------------------------------------------------  
  void   Stu_create(Student*   self)  
  {  
  printf("please   input   name:");  
  scanf("%s",&self->data->name);   //类构造函数  
   
  printf("please   input   age:");  
  scanf("%d",&self->data->age);  
   
  printf("please   input   sex:");  
  scanf("%s",&self->data->sex);  
  }  
  //------------------------------------------------------------------------  
  void   say(char*   sen)  
  {  
  printf("%s",sen);                       //类方法实现  
  }  
  //------------------------------------------------------------------------  
   
  Student_data   student_data={"NUAA",0,"N/A"};//类数据成员父对象  
   
  Student_method   student_method={say};//类方法成员父对象  
   
  Student   student={{sizeof(Student),Stu_create},&student_data,&student_method};//类父对象  
  -----------------------------------------------------------------------------------  
   
   
   
   
   
   
  Top

2 楼casazaft()回复于 2006-06-09 20:12:43 得分 0

在main里:  
  #include   <stdio.h>  
  #include   "student.h"  
  main()  
  {  
  Student*   stu1;  
  stu1=new(&student);  
  stu1->method->say("hello!");  
   
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值