[C] 利用C實踐OOP,以及new,delete

來源:互聯網
上載者:User

研究了一下,總算勉強能夠融會貫通了

c寫成OOP還蠻有樂趣的

編譯環境:Xcode3.2.3+gcc4.2

 

/*<br /> * Cloud.h<br /> * CloudOOC<br /> *<br /> * Created by Cloud on 2010/8/21.<br /> * Copyright 2010 Orz. All rights reserved.<br /> *<br /> */<br />#ifndef OBJECT_H<br />#define OBJECT_H<br />typedef void (*Execute)(struct Object *a_This);<br />typedef struct Object* (*Allocate)();<br />typedef struct _Object_Vtable<br />{<br />char *name;<br />Execute exe;<br />}Object_Vtable;<br />typedef struct _baseCmd<br />{<br />Object_Vtable vtable;<br />}BaseCmd;<br />// --- for common --- //<br />BaseCmd* new(Allocate newObj);<br />void delete(void * item);<br />// --------------------------//<br />// --- for BaseCmd --- //<br />BaseCmd* NewBaseCmd();<br />void Exe_BaseCmd(BaseCmd *a_This);<br />// --------------------------//<br />// --- for HomeCmd --- //<br />typedef struct _homeCmd<br />{<br />Object_Vtable vtable;<br />}HomeCmd;<br />BaseCmd* NewHomeCmd();<br />void Exe_HomeCmd(HomeCmd *a_This);<br />// --------------------------//<br />#endif

 

/*<br /> * Cloud.c<br /> * CloudOOC<br /> *<br /> * Created by Cloud on 2010/8/21.<br /> * Copyright 2010 Orz. All rights reserved.<br /> *<br /> */<br />#include "Cloud.h"<br />// --- for common --- //<br />BaseCmd* new(Allocate newObj)<br />{<br />BaseCmd * obj = newObj();<br />return obj;<br />}<br />void delete(void * item)<br />{<br />free(item);<br />}<br />// --------------------------//<br />// --- for BaseCmd --- //<br />BaseCmd* NewBaseCmd()<br />{<br />BaseCmd * cmd = malloc(sizeof(BaseCmd));<br />cmd->vtable.name = "Cloud";<br />cmd->vtable.exe = Exe_BaseCmd;<br />return cmd;<br />}<br />void Exe_BaseCmd(BaseCmd *a_This)<br />{<br />printf("do base command = %s/n",a_This->vtable.name);<br />}<br />// --------------------------//<br />// --- for HomeCmd --- //<br />BaseCmd* NewHomeCmd()<br />{<br />HomeCmd * cmd = malloc(sizeof(HomeCmd));<br />cmd->vtable.name = "Home";<br />cmd->vtable.exe = Exe_HomeCmd;<br />return cmd;<br />}<br />void Exe_HomeCmd(HomeCmd *a_This)<br />{<br />printf("do home command = %s/n",a_This->vtable.name);<br />}<br />// --------------------------//

 

#include <stdio.h><br />#include <stdlib.h><br />#include "Cloud.h"<br />int main (int argc, const char * argv[])<br />{</p><p>BaseCmd* cmd = new(NewBaseCmd);<br />cmd->vtable.exe(cmd);<br />delete(cmd);</p><p>BaseCmd* cmd2 = new(NewHomeCmd);<br />cmd2->vtable.exe(cmd2);<br />delete(cmd2);</p><p> return 0;<br />}<br />

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.