freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

輕量級(jí)的面向?qū)ο骳語(yǔ)言編程框架介紹-文庫(kù)吧資料

2025-01-13 10:38本頁(yè)面
  

【正文】 _node* int_node3 = Int_node_new()。例如,我們需要這么創(chuàng)建表達(dá)式樹: Int_node* int_node1 = Int_node_new()。 這個(gè)設(shè)計(jì)方案可以用,不過(guò)有一個(gè)問(wèn)題。 void (*init)(Binary_node* t, const char* a, Expr_node* b, Expr_node * c)。 //假設(shè)操作符最長(zhǎng)不超過(guò) 2個(gè)字符 Expr_node* left。 CLASS(Binary_node) { EXTENDS(Expr_node)。 void (*init)(Unary_node* t, const char* a, Expr_node* b)。 char op[3]。 其他類型又如何呢?每個(gè)類中都必須存儲(chǔ)一個(gè)操作符(這倒簡(jiǎn)單,本文中假定 操作符最長(zhǎng)不超過(guò) 2 個(gè)字符,所以,可以用長(zhǎng)度為 3 的字符數(shù)組來(lái)保存),但是如何存儲(chǔ)子節(jié)點(diǎn)呢?在運(yùn)行時(shí)之前,我們并不知道子節(jié)點(diǎn)的類型會(huì)是什么,所以我們不能按值存儲(chǔ)子節(jié)點(diǎn),必須存儲(chǔ)指針。 void (*init)(Int_node* t, int k)。 具體類的情形 怎樣?這些具體類型中最簡(jiǎn)單的一類是包含一個(gè)整數(shù),沒有子節(jié)點(diǎn)的節(jié)點(diǎn): CLASS(Int_node) { EXTENDS(Expr_node)。 首先,我們抽象出“節(jié)點(diǎn)”的概念, 抽象類的名字定為 Expr_node, 它提供了打印的抽象 接口,所有的實(shí)際節(jié)點(diǎn)類型均從它派生: ABS_CLASS(Expr_node) { void (*print)(Expr_node* t)。這就是動(dòng)態(tài)綁定的用武之地了:我們可以定義一個(gè)虛函數(shù)( print)來(lái)指明應(yīng)當(dāng)如何打印各種節(jié)點(diǎn)。另外兩個(gè)分別表示一元表達(dá)式和二元表達(dá)式,包含一個(gè)操作符,分別有一個(gè)或兩個(gè)子節(jié)點(diǎn)。 解決方案: 通過(guò)考查這個(gè)樹結(jié)構(gòu),會(huì)發(fā)現(xiàn)這里有 3 種節(jié)點(diǎn)。這些程序的開發(fā)者永遠(yuǎn)需要面對(duì)諸如內(nèi)存分配、靈活性和效率之類的問(wèn)題。 這個(gè) 程序所做的事情在很多需要處理 復(fù)雜輸入的大型程序中是很典型的,例如編譯器、編輯器、 CAD/CAM 系統(tǒng)等。 } 打印 ((5)*(3+4)) (((5)*(3+4))*((5)*(3+4))) 作為輸出。 Expr_delete(expr1)。 Expr_delete(expr3)。 printf(\n)。 printf(\n)。 exprinitBinary(expr, *, expr3, expr3)。 expr2initBinaryX(expr2, +, 3, 4)。 Expr* expr = Expr_new()。 Expr* expr2 = Expr_new()。 我們希望能通過(guò)調(diào)用合適的函數(shù)來(lái)創(chuàng)建這樣的樹,然后打印該樹的完整括號(hào)化形式 。例如,表達(dá)式( 5) *( 3+4)對(duì)應(yīng)的樹為: * + 5 4 3 一個(gè)表達(dá)式樹包括代表常數(shù)、一元運(yùn)算符和二元運(yùn)算符的節(jié)點(diǎn)。 通過(guò)這個(gè)例子,我們 期望展現(xiàn) 出 LW_OOPC 在 遭遇問(wèn)題本身比較復(fù)雜的情形下, 是 如何從容應(yīng)對(duì) 的 , 以 加深 讀者對(duì) LW_OOPC 的認(rèn)識(shí)。同樣,我們可以將 Fish 對(duì)象, Dog 對(duì)象,以及 Car對(duì)象均視為可移動(dòng)物體,均裝入 IMoveable 容器,然后用完全相同的方式調(diào)用 IMoveable 接口的 move 方法。 } 從上邊的代碼中,我們驚喜地發(fā)現(xiàn),在 C 語(yǔ)言中,借助 LW_OOPC,我們實(shí)現(xiàn)了將不同的動(dòng)物 ( Fish 和 Dog 對(duì)象)裝入 Animal 容器,然后可以用完全相同的方式調(diào)用 Animal的方法(比如 eat 和 breathe 方法),而實(shí)際調(diào)用的是具體的實(shí)現(xiàn)類( Fish 和 Dog)的對(duì)應(yīng)方法。 lw_oopc_delete(car)。 } lw_oopc_delete(fish)。 j++) { IMoveable* moveObj = moveObjs[j]。 } // 循環(huán)打印可移動(dòng)物體容器內(nèi)的可移動(dòng) 物體移動(dòng)方式的信息 for(j=0。 animalbreathe(animal)。 i++) { Animal* animal = animals[i]。 // 循環(huán)打印動(dòng)物容器內(nèi)的動(dòng)物信息 for(i=0。 // 將 dog指針轉(zhuǎn)型為 IMoveable接口類型指針,并賦值給 moveOjbs數(shù)組的第二個(gè)成員 moveObjs[1] = SUPER_PTR(dog, IMoveable)。 // 將 dog指針轉(zhuǎn)型為 Animal類型指針,并賦值給 animals數(shù)組的第二個(gè)成員 animals[1] = SUPER_PTR(dog, Animal)。 // 將 fish指針轉(zhuǎn)型為 Animal類型指針,并賦值給 animals數(shù)組的第一個(gè)成員 animals[0] = SUPER_PTR(fish, Animal)。 // i和 j是循環(huán)變量 int j = 0。 // 初始化動(dòng)物容器(這里是 Animal指針數(shù)組 ) IMoveable* moveObjs[3] = { 0 }。 // 創(chuàng)建狗對(duì)象 Car* car = Car_new()。 END_CTOR 下面,我們 實(shí)現(xiàn) main 方法, 以 展示 LW_OOPC 的威力 ?: include int main() { Fish* fish = Fish_new()。 最后,我們把 Car 類也實(shí)現(xiàn)了: void Car_move(IMoveable* t) { printf(汽車在開動(dòng)! \n)。 END_CTOR 細(xì)心的朋友可能已經(jīng)注 意到了,這里 又 有 一個(gè)陌生的 宏 : SUPER_CTOR 未介紹。 FUNCTION_SETTING(, Dog_move)。 FUNCTION_SETTING(, Dog_eat)。 animalsetAge(animal, age)。 } /* 初始化狗的昵稱和年齡 */ void Dog_init(Dog* t, const char* name, int age) { Animal* animal = SUPER_PTR(t, Animal)。 } /* 狗的呼吸行為 */ void Dog_breathe(Animal* t) { printf(狗用肺呼吸! \n)。 FUNCTION_SETTING(init, Fish_init)。 FUNCTION_SETTING(, Fish_breathe)。 } CTOR(Fish) SUPER_CTOR(Animal)。 animalsetName(animal, name)。 } /* 魚的移動(dòng)行為 */ void Fish_move(IMoveable* t) { printf(魚 在水里游! \n)。 對(duì)于 Fish 和 Dog 類的實(shí)現(xiàn),與 Animal 基本上是類似的,除了將 ABS_CTOR 換成了CTOR,直接參見代碼: /* 魚的吃行為 */ void Fish_eat(Animal* t) { printf(魚吃水草! \n)。 LW_OOPC 中的 CTOR 系列宏( CTOR/END_CTOR,ABS_CTOR/END_ABS_CTOR)除了給對(duì)象(在 C 語(yǔ)言中是 struct 實(shí)例 )分配內(nèi)存,然后,緊接著要 為結(jié)構(gòu)體中的函數(shù)指針成員賦值,這一過(guò)程,也可以稱為函數(shù)綁定(有點(diǎn)類似 C++中的動(dòng)態(tài)聯(lián)編)。 ABS_CTOR 表示抽象類的定義開始,ABS_CTOR(Animal)的含義是 Animal 抽象類的“構(gòu)造函數(shù)”開始。 FUNCTION_SETTING(init, Animal_init)。 FUNCTION_SETTING(se
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1