/*************   lw_oopc.h  *******************/

# include"malloc.h"# ifndef LOOPC_H//假如没有定义 LOOPC_H 那么就执行 #define 到 #endif 之间的指令 定义了 就跳过# define LOOPC_H

# define PI3.14156# define CLASS(type)/typedefstructtype type ;/structtype 

# define CTOR(type) /void*type## New()///## 是告诉编译器 type 是一个 变量{ /structtype*t;/    t=(structtype*)malloc(sizeof(structtype));

# define CTOR2(type ,type2)/void*type2##New()/    { /structtype*t;/    t=(structtype*)malloc(sizeof(structtype));

# define END_CTORreturn(void*)t; };# define FUNCTION_SETTING(f1,f2) t->f1=f2;# define IMPLEMENTS(type)structtype type# define INTERFACE(type)structtype#endif附注:

物件導向ANSI-C

---- 適用於與ANSI-C相容的開發環境,

例如TurboC, VC++, DEV-C++等。

---- Windows平台的應用程式為例。

高煥堂

著作權說明:

1. lw_oopc.h巨集檔內容著財權為本書作者:高煥堂 所擁有。

2. 任何營利性、商業性使用,必須先取得本書作者的書面同意。

Full copyright of lw_oopc.h content lies with the Author, Huantang Kao(高煥堂). No part of it may be reproduced, in any form or by any means, without permission in writing by the Author.(詳細請閱第28)

   序言

近年來,嵌入式(Embedded)軟體應用愈來愈廣,如數位家電、手機、數字化汽車等。而嵌入式軟開發所使用的語言中,C語言仍約佔80%之多,其中ANSI-C在業界佔有極重要的地位。由於嵌入式軟體應用愈來愈廣,軟體品質大大影響了數位產品的穩定和可靠度,因之如何提升ANSI-C程式的簡潔性、易讀性及重覆使用性,乃是當今軟體業的熱門話題。例如世界知名的麥肯錫(McKinsey)顧問公司,在2006年的報告("Getting better software to manufactured products")呼籲軟體業積極提昇其系統分析及設計的能量,才能解決軟體含量愈來愈多的數位產品的信賴度問題。

如何解決上述問題呢?其方向已經很清楚了,就是:讓C語言與物件導向程式設計(Object-Oriented Programming,簡稱OOP)技術結合。就像當今的其他主流電腦語言(C#Java)一般。一旦C語言與物件導向技術結合了,也能進一步與UML相結合,更提昇系統分析與設計的品質了。因此筆者撰寫本書,期望陪伴眾多C程式人員更上層樓,強化系統分析及設計的技能,迎接日益廣大的嵌入式應用市場。

也許你會問到:在1986年時,貝爾(Bell)實驗室已經將C語言與物件導向技術結合成為C++語言了,為何還需要OOPC呢?其答案是:C++語言有些貪心,將整套的物件導向技術涵括進去,導致C++的效率遠比單純C語言慢了許多。由於嵌入式軟體所處的硬體資源大都極為有限,對程式執行效率斤斤計較;所以在今天嵌入式軟體開發上,使用最廣的仍是C語言。

本書所介紹的物件導向ANSI-C語言並不是一個新的語言,它只運用單純ANSI-C語言的巨集(Macro)技巧,實現了物件導向的基本技術,讓系統分析與設計階段的UML模型能與C程式緊密對應,以提升C程式的品質。此外,這些巨集在編譯階段就被翻譯為單純C程式碼了,仍然保持其單純C的高效率,符合嵌入式軟體環境之需要。本書由淺入深分為四篇(18),希望本書能陪伴你馳聘於嵌入式應用領域之中,並鴻圖大展。

高煥堂 謹識於 2008年元月

目錄

第一篇 認識 ANSI-C 語言

1  嵌入式時代最划算策略, 7

1.1 迎接高品質的嵌入式軟體時代

1.2 基於TurboC 2.0環境的評量

1.3 基於Visual C++ 環境的評量

1.4  LW_OOPC C++ 的比較與評量

2  認識物件導向ANSI-C, 29

2.1 簡介ANSI-C語言

2.2 簡介LW_OOPC:替ANSI-C黃袍加身

2.3  ANSI-C 的基本組成:函數與變數

3 C的基本資料型態, 47

3.1 簡介資料型態

3.2 整數型態

3.3 無正負號整數

3.4 整數的輸出格式

3.5 字元型態

3.6 浮點數型態

4 C的資料運算, 59

4.1 簡介資料運算

4.2 算術與指定運算

4.3 關係運算

4.4 邏輯運算

4.5 算術指定運算

4.6 1 及減1 運算

4.7 位址運算

4.8 逐位元運算

5 C的決策與迴圈, 71

5.1 邏輯運算與決策

5.2 巢狀 if 指令

5.3 多選1 的抉擇

5.4  while 迴圈

5.5  for迴圈

5.6  do 迴圈

6 C的指標, 81

6.1 指標是什麼 ?

6.2 傳遞指標參數

6.3 函數回傳指標

6.4 函數指標

7 C的結構(struct), 89

7.1 什麼是結構(struct)

7.2 結構的指定運算

7.3 結構指標

7.4 動態記憶體分配

7.5 組合

8C的儲存種類, 97

8.1 變數的儲存種類

8.2 靜態函數

8.3  extern 種類

9 C的陣列及字串, 103

9.1 陣列的意義

9.2 一維陣列

9.3 一維陣列與指標

9.4 二維陣列與多維陣列

9.5 二維陣列與指標

9.6 給予陣列初值

9.7 使用字串

10 C前置處理程式, 119

10.1 前置處理程式的工作

10.2 使用巨集

10.3 含入標頭檔

10.4 有條件的編譯

第二篇 介紹物件導向觀念及 OOPC

11 認識物件(Object), 134

11.1 自然界之物件

11.2 軟體物件

11.3 物件與函數

11.4 物件與類別

11.5 物件指標

11.6 建構式

11.7 類別設計之實例說明

12 物件溝通方法, 155

12.1 「訊息傳遞」溝通方法

12.2 「訊息傳遞」範例() --- Toggle Light電燈為例

12.3 OOPC實現:使用Turbo C

12.4 OOPC實現:使用VC++ 2005

12.5 「訊息傳遞」範例 ( ) --- 以冰箱小燈控制為例

13 物件溝通實例, 177

13.1 以向量(Vector)類別封裝一維陣列

13.2 以矩陣 (Matrix) 類別封裝二維陣列
第三篇 如何規劃精緻的介面

14 認識介面(Interface), 196

14.1 如何定義介面?

14.2 多個類別實現同一介面

14.3 以介面實現多型性(Polymorphic)

14.4 一個類別實現多個介面

15 介面與樣式:降低物件間之相依性, 215

15.1 物件相依性:細節設計優劣之評量

15.2 樣式觀念

15.3 軟體設計樣式

15.4 簡介IoC樣式

15.5  IoCCOR樣式的攜手合作

第四篇 LW_OOPC 實用範例

16 LW_OOPC實用範例之一, 238

16.1 認識「錄音」概念和和技術

16.2 單純「錄音」的範例分析

16.3 「錄音/播放」範例之分析

16.4 「錄音 / 播放」範例之實作:使用 LW_OOPC

17 LW_OOPC實用範例之二, 265

17.1 什麼是半加器?

17.2 設計「位元計算機」

17.3 實現位元計算機:使用 LW_OOPC

18 LW_OOPC實用範例之三, 281

18.1 形形色色的塗鴉程式

18.2 塗鴉程式範例說明

18.3 塗鴉系統分析與設計

18.4 塗鴉程式之實作:使用 LW_OOPC
---- END ----

C语言中利用宏进行面向对象(OOP)的操作相关推荐

  1. C语言中利用宏,实现一个整数的奇数位和偶数位交换,以及计算结构体中某变量相对于首地址的偏移

    C语言中的自定义宏 自定义宏,令其实现所需功能 1.写一个宏,可以将一个整数字的奇数位和偶数位交换. 2.写一个宏,计算结构体中某变量相对于首地址的偏移. 具体思路1: 首先取出当前数的奇数部分和偶数 ...

  2. 【示例】C语言中利用数组存放函数指针

    C语言中利用数组存放函数指针,增加函数使用的灵活性.使用时只需提供数组索引,即可调用不同函数. 预备知识: 1.指向函数的指针 一个函数在编译时被分配一个入口地址,这个地址就被称为函数的指针. 例如: ...

  3. C语言中利用Swap函数交换变量a,b

    C语言中利用Swap函数交换变量a,b 常见错误写法 error1 void Sawp_error1(int a,int b) {int tmp;tmp=a;a=b;b=tmp; } int main ...

  4. Excel中利用宏批量生成md5加密

    ** Excel中利用宏批量生成md5加密 一.下载宏文件 点击下载md5宏.xla 二.找到excle并加载宏 1.依次打开[文件]-[选项]-[自定义功能区] 选中[开发工具] 2.这样在Exce ...

  5. c语言读取文件字节数,怎么在C语言中利用fstat函数获取文件的大小

    怎么在C语言中利用fstat函数获取文件的大小 发布时间:2021-01-22 17:03:17 来源:亿速云 阅读:110 作者:Leah 怎么在C语言中利用fstat函数获取文件的大小?针对这个问 ...

  6. C语言使用define定义圆周率,C语言中的宏处理

    在C语言中使用宏,我们经常这么做,但是为什么使用宏,他可以做什么,我们或许只是一知半解,下面简单介绍如何在C语言中使用宏预处理器. #define语句 对于define语句,我们已经非常熟悉,一个宏定 ...

  7. VC中利用ADO共同实现数据库的操作

    VC中利用ADO共同实现数据库的操作 ADO是应用层的编程接口,它通过OLE DB提供的COM接口访问数据,它适合于各种客户机/服务器应用系统和基于Web的应用,尤其在一些脚本语言中访问数据库操作是A ...

  8. php处理psd 获取图层,怎么在PHP中利用Imagick对PSD文件进行操作

    怎么在PHP中利用Imagick对PSD文件进行操作 发布时间:2020-12-22 14:50:29 来源:亿速云 阅读:95 作者:Leah 怎么在PHP中利用Imagick对PSD文件进行操作? ...

  9. MDK中利用宏定义__DATE__和__TIME__设置产品的代码固件版本

    文章目录 前言 一.__DATE__和__TIME__是什么? 二.使用步骤 1.引入库 2.参考代码 总结 前言 STM32开发中,利用宏定义的__DATE__和__TIME__设置产品的代码固件版 ...

最新文章

  1. 安全产品研发与落地的一些方法与思考
  2. dao接口有什么好处_Java后端精选技术:我们为什么要使用AOP?
  3. 数据结构—分别用头插法和尾插法建立单链表
  4. docker 远程连接 文件看不到_开发提升十倍生产力: IDEA 远程一键部署 Spring Boot 到 Docker...
  5. 对接码是什么意思_设备对接是什么意思
  6. 北京市延庆县门户网站改版及电子政务网站群建设项目落定西部动力
  7. android - 房源登记模版
  8. [从头读历史] 第262节 左传 [BC597至BC538]
  9. 微信小程序开发博客项目-篇幅《一》
  10. 小程序获取收货地址流程
  11. 《测绘综合能力》——工程测量
  12. 计算机专业简历文案,文案创意求职简历范文
  13. vba html 转化为 xlsx,使用VBA批量转换Excel格式,由.xls转换成.xlsx
  14. Linux下路由器的配置
  15. RK3588 Android12 SDK 中在device介绍及如何新建自己的产品lunch项
  16. centos7 vim查找_Linux CentOS7 中vim命令的使用
  17. 两性情感关系中的核心价值是什么?
  18. 买了云服务器不会用?写了网站不会部署?超详细springboot+vue前后端项目部署教程来啦
  19. 纠正你读错的电脑英文词汇--(2)
  20. 1.5_18:鸡尾酒疗法(NOIP)

热门文章

  1. DSPE-PEG2-propargyl分子式:C49H92NO11P化学表征
  2. php实现凯撒密码加密算法,Golang 实现凯撒密码
  3. 猜丁壳java_JAVA第09次实验(IO流)
  4. 笔记本电脑Win7安装NVIDIA显卡驱动,提示缺少kb4474419和kb4490628解决方案图文教程
  5. cep java_使用两次窗口查询Siddhi CEP
  6. java 给static变量赋值_java static变量可以赋值吗?
  7. 打开网页中提示: drwtsn32.exe-应用程序错误-解决方法
  8. GDD无监督图像对融合 论文笔记
  9. 如何制作有小颗粒的背景图片
  10. 利用阿里指数分析平台 分析网民采购情况