用C 语言实现面向对象编程

合集下载

嵌入式软件设计期末复习题及答案

嵌入式软件设计期末复习题及答案

单选题1、下列关于嵌入式系统描述,错误的是()A.与通用计算机在技术本质上没有区别B.对体积和功耗、可靠性、成本有严格要求C.可以解决某类确定问题D.功能比通用计算机更强大正确答案:D解析:D、通用计算机的应用面更广,嵌入式计算机一般用于解决某一类特定问题,二者需求不同,没有明确的功能强弱之分。

2、下列哪一项,不属于嵌入式系统的固有组成部分()A.嵌入式操作系统B.外围电路C.嵌入式应用软件D.处理器正确答案:A解析:A、对于简单的嵌入式系统,可不设计操作系统,但是处理器和硬件电路必须有,为了解决某确定问题,嵌入式应用软件也必须有3、下列编程语言中,执行效率最高的是()A.C语言B.JAVA语言C.汇编语言D.C++语言正确答案:C解析:C、执行效率最高,开发效率最低4、采用嵌入式操作系统的好处是()A.程序员可专注于问题B.系统速度更快C.应用软件运行更快D.执行效率更高正确答案:A解析:A、牺牲一部分处理器运行性能,获得更好的开发效率,对程序员屏蔽部分硬件细节,使之专注于问题。

5、直接针对硬件编程,不可以()A.利用操作系统的调度机制B.读写内存C.访问处理器的寄存器D.控制硬件工作模式和过程正确答案:A解析:A、在该方式下,不存在操作系统6、关于模块描述,错误的是()A.模块划分应符合高内聚低耦合的原则B.嵌入式系统中,每个硬件设备对应一个模块C.几个模块共享的全局变量,可定义在这些文件共有的头文件中。

D.C语言中,源文件和对应头文件构成一个模块正确答案:C解析:C、头文件中不可以定义变量,只能做变量声明7、关于中断服务程序,错误的是()A.不能进行参数传递B.不应在其中包含复杂操作C.可向主程序返回计算结果D.应该尽可能短小,以增强系统实时性正确答案:C解析:C、中断程序没有调用者,因此也不可通过其返回结果8、关于无操作系统嵌入式系统的中断模型,正确的是()A.主程序通过无限循环执行实际中断任务,不区分中断优先级B.中断发生时,中断服务程序将中断类型登记到堆栈中C.中断程序中仅作中断登记D.中断程序中完成对应事务处理正确答案:C解析:A、优先级通过case的先后顺序体现B、登记到队列中D、中断程序仅作登记9、在采用C语言模拟面向对象特性时,正确的描述是()A.函数指针用于实现类的属性成员B.结构与类的功能完全相同C.结构可以包含成员函数D.通过结构体包含实现继承正确答案:D解析:A、函数指针用于模拟成员函数的功能C、结构可以模拟而非包含成员函数10、关于采用C语言进行“面向对象编程”,错误的描述是()A.可以实现更好的程序结构B.可以实现部分“类”的功能C.在菜单设计方面效率较低D.可以有效的组织汉字显示正确答案:C解析:C、应为效率更高11、关于ARM C的程序优化,说法错误的是()A.可分析程序是否高效B.可分析程序运行时间C.可指导C程序设计D.可指导汇编程序设计正确答案:D解析:D、目的是通过分析C程序对应的汇编指令,了解程序效率,最终指导程序员写出高效的C程序,而非汇编程序。

C语言中的面向对象

C语言中的面向对象

C语言中的面向对象(1)-类模拟和多态,继承在面向对象的语言里面,出现了类的概念。

这是编程思想的一种进化。

所谓类:是对特定数据的特定操作的集合体。

所以说类包含了两个范畴:数据和操作。

而C语言中的struct仅仅是数据的集合。

(liyuming1978@)1.实例:下面先从一个小例子看起输出结果:11It is B.c=13It is A.a=1It is B_Fun2.类模拟解说:我在网上看见过一篇文章讲述了类似的思想(据说C++编程思想上有更加详细的解说,可惜我没空看这个了,如果有知道的人说一说吧)。

但是就象C++之父说的:“C++和C 是两种语言”。

所以不要被他们在语法上的类似就混淆使用,那样有可能会导致一些不可预料的事情发生。

其实我很同意这样的观点,本文的目的也不是想用C模拟C++,用一个语言去模拟另外一个语言是完全没有意义的。

我的目的是想解决C语言中,整体框架结构过于分散、以及数据和函数脱节的问题。

C语言的一大问题是结构松散,虽然现在好的大型程序都基本上按照一个功能一个文件的设计方式,但是无法做到更小的颗粒化――原因就在于它的数据和函数的脱节。

类和普通的函数集合的最大区别就在于这里。

类可以实例化,这样相同的函数就可以对应不同的实例化类的变量。

自然语言的一个特点是概括:比如说表。

可以说手表,钟表,秒表等等,这样的描述用面向对象的语言可以说是抽象(继承和多态)。

但是我们更要注意到,即使对应于手表这个种类,还是有表链的长度,表盘的颜色等等细节属性,这样细微的属性如果还用抽象,就无法避免类膨胀的问题。

所以说类用成员变量来描述这样的属性。

这样实例并初始化不同的类,就描述了不同属性的对象。

但是在C语言中,这样做是不可能的(至少语言本身不提供这样的功能)。

C语言中,如果各个函数要共享一个变量,必须使用全局变量(一个文件内)。

但是全局变量不能再次实例化了。

所以通常的办法是定义一个数组。

以往C语言在处理这样的问题的时候通常的办法就是这样,比如说socket的号,handel等等其实都是数组的下标。

C语言代码复用与类库封装方法

C语言代码复用与类库封装方法

C语言代码复用与类库封装方法代码复用和类库封装是软件开发中非常重要的概念,在C语言中,我们可以采用一些方法来实现代码的复用和类库的封装,提高开发的效率和代码的可维护性。

本文将介绍一些常用的C语言代码复用和类库封装的方法。

一、宏定义和预处理宏定义是C语言中常用的一种代码复用的方法。

通过使用宏定义,我们可以将一段常用的代码片段封装成一个宏,然后在代码中多次调用该宏,从而达到代码复用的目的。

例如,我们可以定义一个用于计算两个数的最大值的宏:```c#define MAX(a, b) ((a) > (b) ? (a) : (b))```然后在代码中可以多次调用该宏:```cint max = MAX(3, 5);```二、函数封装和模块化设计函数封装是C语言中常用的一种代码复用的方法。

通过将一段特定功能的代码封装成一个函数,我们可以在不同的地方调用该函数,实现代码的复用。

同时,模块化设计也是一个很重要的概念。

我们可以将一段功能相关的函数封装成一个模块,提供给其他程序使用。

例如,我们可以封装一个用于计算斐波那契数列的函数:```cint Fibonacci(int n){if (n <= 0)return 0;else if (n == 1)return 1;elsereturn Fibonacci(n - 1) + Fibonacci(n - 2);}```然后可以在需要计算斐波那契数列的地方调用该函数:```cint result = Fibonacci(5);```三、类库封装和面向对象编程思想类库封装是C语言中实现面向对象编程思想的一种方法。

通过将相关的数据结构和函数封装成一个类,我们可以实现面向对象的代码复用和封装。

在C语言中,我们可以使用结构体来实现类的概念,使用函数指针来实现类的方法。

例如,我们可以封装一个用于处理链表的类库:```ctypedef struct Node {int data;struct Node* next;} Node;typedef struct LinkedList {Node* head;void (*add)(struct LinkedList*, int);void (*traverse)(struct LinkedList*);} LinkedList;void LinkedList_add(LinkedList* list, int data){// 添加节点的代码}void LinkedList_traverse(LinkedList* list){// 遍历链表的代码}LinkedList* LinkedList_create(){LinkedList* list = (LinkedList*)malloc(sizeof(LinkedList)); list->head = NULL;list->add = LinkedList_add;list->traverse = LinkedList_traverse;return list;}```然后可以在代码中使用该类库:```cLinkedList* list = LinkedList_create();list->add(list, 1);list->add(list, 2);list->traverse(list);```通过类库的封装,我们可以更好地组织和管理代码,实现高度的代码复用和封装。

C语言实现面向对象设计

C语言实现面向对象设计

C语言实现面向对象设计C语言是一种过程式编程语言,它并不直接支持面向对象的设计。

但是,通过一些技巧和约定可以在C语言中实现面向对象的编程模式。

面向对象的设计主要包含了封装、继承和多态三个概念,下面我们将分别介绍如何在C语言中实现这三个概念。

1.封装:封装是面向对象设计的一个重要概念,它将数据与操作数据的函数组合在一起,形成一个独立的单元即对象。

在C语言中,我们可以使用结构体来实现封装的效果。

结构体可以将不同类型的数据组合在一起,并通过函数来操作这些数据,模拟对象的概念。

```c//定义一个结构体来表示一个人的信息typedef structchar name[20];int age;} Person;//定义一个函数来创建一个人的实例Person* createPerson(char* name, int age)Person* person = (Person*)malloc(sizeof(Person));strcpy(person->name, name);person->age = age;return person;//定义一个函数来输出一个人的信息void printPerson(Person* person)printf("Name: %s, Age: %d\n", person->name, person->age);int maiPerson* person = createPerson("Alice", 25);printPerson(person);free(person);return 0;```在上面的代码中,我们通过创建一个结构体`Person`来封装一个人的信息,然后使用`createPerson`函数来创建一个`Person`对象,并使用`printPerson`函数来输出对象的信息。

2.继承:继承是面向对象设计中一个很有用的特性,它允许一个对象继承另一个对象的属性和方法。

C语言编程范式

C语言编程范式

C语言编程范式C语言编程范式是一种编程风格和风格,它为程序员提供了一种组织和管理代码的方法。

它可以帮助程序员编写可读性强、易于维护和高效的代码。

以下是一些常见的C语言编程范式:1. 过程性编程过程性编程是一种结构化的、基于过程的编程范式。

在这种编程方式下,程序员使用一系列函数来执行一定的任务。

这些函数通常接收一些输入参数,计算结果并返回输出参数。

函数之间的参数传递通常通过堆栈来实现。

过程性编程通常用于编写较小规模的应用程序,图形用户界面和操作系统等,因为这些程序通常可以分解为一系列简单的函数。

然而,过程性编程有一定的限制,它无法处理一些更为复杂的问题,例如并发编程和模块化编程。

2. 面向对象编程面向对象编程是一种基于对象和类的编程范式。

在这种编程方式下,程序员通过定义类和对象来提供各种功能。

类描述了对象的属性和方法,而对象则表示实际的实例。

类和对象可以被继承和重用,这使得程序员可以更容易地编写可重用的代码。

面向对象编程通常用于编写中大型规模的应用程序,例如网络应用程序、游戏和商业软件等。

它具有强大的继承和重用性,能够处理更为复杂的问题,并支持并发编程和模块化编程。

3. 函数式编程函数式编程是一种基于函数的编程范式。

在这种编程方式下,程序员使用一系列函数来执行计算,而不是通过明确的状态变量来控制程序的行为。

这些函数通常使用不可变的数据结构和纯粹的函数来实现。

这种方式可以消除副作用和状态变量的问题,并使代码更加模块化和可扩展。

函数式编程通常用于编写比较算法、大规模计算和数据处理等。

它具有高度抽象和可重用性,并支持并发编程和模块化编程。

声明式编程是一种描述逻辑的编程范式。

在这种编程方式下,程序员描述问题的解决方法,而不是明确的算法或程序。

程序员使用类似于数学的形式来描述问题,并使用逻辑运算符和特定的语法来描述解决方案。

声明式编程通常用于编写查询语言、数据分析、机器学习和人工智能等。

它具有高度的表达能力和可读性,并支持更加复杂的任务和算法。

c语言程序设计与现代方法

c语言程序设计与现代方法

c语言程序设计与现代方法C语言程序设计与现代方法引言C语言是一种广泛应用于计算机科学和软件开发领域的编程语言。

它的设计初衷是为了提供一种高效、可移植、底层的编程语言,使程序员能够直接操作计算机硬件资源。

随着计算机技术的不断进步和发展,C语言的应用也不断演化和创新,现代方法在C语言程序设计中扮演着重要的角色。

一、面向对象编程面向对象编程是一种现代的程序设计方法。

在C语言中,虽然没有内置的面向对象特性,但是可以通过结构体和函数指针等技术来模拟面向对象的概念和功能。

通过面向对象编程,可以更好地组织和管理程序的代码,提高代码的可读性和可维护性。

二、模块化设计模块化设计是现代程序设计的重要思想之一。

在C语言中,可以通过函数和文件的划分来实现模块化设计。

将程序划分为多个模块,每个模块负责特定的功能,通过接口和数据传递来实现模块之间的通信和交互。

模块化设计可以提高代码的复用性和可测试性,减少代码的耦合性。

三、并发编程随着多核处理器的普及,利用并发编程来提高程序的性能和效率成为一种重要的需求。

C语言提供了一些线程库和同步机制来支持并发编程。

通过使用这些现代的并发编程方法,可以充分利用多核处理器的能力,提高程序的并发性和响应能力。

四、异常处理异常处理是现代程序设计中非常重要的一部分。

在C语言中,可以通过错误码和异常处理函数来处理异常情况。

通过合理地设计异常处理机制,可以提高程序的鲁棒性和可靠性,增加程序的容错性。

五、内存管理内存管理是C语言程序设计中一个非常重要的方面。

现代的内存管理方法可以帮助程序有效地利用内存资源,避免内存泄漏和内存溢出等问题。

通过使用动态内存分配和智能指针等技术,可以更好地管理程序的内存使用情况,提高程序的性能和稳定性。

六、测试和调试测试和调试是现代程序设计中必不可少的环节。

在C语言中,可以使用各种测试框架和调试工具来进行程序的测试和调试。

通过合理地设计测试用例和运用调试工具,可以发现并修复程序中的错误和问题,提高程序的质量和可靠性。

C语言面向对象编程及其实现方法

C语言面向对象编程及其实现方法

C语言面向对象编程及其实现方法在计算机编程领域,面向对象编程(Object-Oriented Programming,简称OOP)是一种常用的编程范式。

C语言作为一种强大而灵活的编程语言,在实现面向对象编程方面也有其独特的方法。

本文将介绍C语言面向对象编程的基本概念、实现方法和相关技巧。

一、C语言面向对象编程基本概念1.类和对象面向对象编程的核心是类(Class)和对象(Object)。

类是一种抽象数据类型,描述了一类具有相同属性和方法的对象集合。

对象是类的实例,它具有类所描述的属性和方法。

2.封装封装是面向对象编程的一个重要特性,通过将数据和相关操作封装在类中,实现了数据的隐藏和保护。

只有类内部可以直接访问类的私有成员,外部只能通过类提供的接口访问数据。

3.继承继承允许一个类派生出另一个类,使得子类继承父类的属性和方法,同时可以根据需要增加新的属性和方法。

继承可以实现代码的重用,提高了软件的可维护性和扩展性。

4.多态多态是指同一操作对于不同的对象,可以有不同的行为。

通过多态,一个函数或方法可以具有多个不同的实现,从而实现了动态绑定和运行时多态性。

二、C语言实现面向对象编程的方法1.结构体和函数C语言中可以使用结构体和函数的组合来实现类和对象的概念。

结构体可以用来定义类的属性,而函数则可以定义类的方法。

通过使用指针来操作对象,可以实现对对象的封装和访问控制。

2.函数指针和回调函数函数指针是一种特殊的指针类型,它可以指向函数的地址。

通过使用函数指针和回调函数,可以在C语言中实现类似于虚函数(virtual function)和多态的功能。

3.宏和预处理器C语言的宏和预处理器可以用来定义类和对象的相关宏,从而简化代码的编写。

宏可以用来定义类的属性和方法,预处理器可以用来生成类的实例。

4.模块化编程面向对象编程倡导的模块化思想也可以在C语言中得到体现。

通过将代码分为不同的模块,每个模块实现特定的功能,可以提高代码的可读性、可维护性和重用性。

C中类与类定义及具体使用方法

C中类与类定义及具体使用方法

C中类与类定义及具体使用方法C语言是过程式语言,它并不直接支持面向对象编程(OOP)。

然而,我们可以通过结构体和函数指针来模拟类和类的实例。

本文将介绍在C语言中如何定义类和使用具体的类来实现面向对象编程。

1.类的定义在C语言中,我们可以使用结构体来定义一个类。

结构体可以包含数据成员和函数指针成员。

```ctypedef struct Personchar name[50];int age;void (*sayHello)(struct Person*);} Person;```上述代码定义了一个名为Person的结构体,它包含了一个字符数组name、一个整数age和一个函数指针sayHello。

2.类的实例化在C语言中,我们可以使用结构体变量来实例化一个类的对象。

```cPerson p1;```上述代码创建了一个名为p1的Person对象。

3.类的方法定义在C语言中,类的方法可以通过函数指针成员来定义。

```cvoid sayHello(struct Person* self)printf("Hello, my name is %s.\n", self->name);```上述代码定义了一个名为sayHello的函数,它接受一个指向Person对象的指针作为参数,并打印出对象的名称。

4.类的方法赋值在实例化类的对象后,我们可以将方法赋值给对象的函数指针成员。

```cp1.sayHello = sayHello;```上述代码将sayHello函数赋值给p1对象的sayHello函数指针成员。

5.类的方法调用在C语言中,我们可以通过对象的函数指针成员来调用类的方法。

```c```上述代码通过调用p1对象的sayHello函数指针成员来调用sayHello方法,并将p1对象的地址作为参数传递给方法。

完整示例代码如下:```c#include <stdio.h>typedef struct Personchar name[50];int age;void (*sayHello)(struct Person*);} Person;void sayHello(struct Person* self)printf("Hello, my name is %s.\n", self->name);int maiPerson p1;strcpy(, "John");p1.age = 25;p1.sayHello = sayHello;return 0;```运行上述代码将输出:```Hello, my name is John.```通过结构体和函数指针,我们可以在C语言中模拟类和实现面向对象编程的一些特性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

IMPLEMENTS(BASE)
#ifndef LW_OOPC_PURE_STATIC #ifndef LW_OOPC_STATIC #define New(Class) Class##New() #endif #endif
//--对象动态构造宏
2、类的实例化必须有 3 步:定义、构造、初始化。尤其初始化时候通常是通过指针的应用来实现
用 C 语言实现面向对象编程 (合肥工业大学 潘秀才) 我曾经在嵌入式控制系统工作过,苦于嵌入式系统编程一直是 C 语言,而没法用 C++或其他高级 语言的面向对象方法编程。经过研究生的学习和探索,偶然间发现高焕堂老师写 OOPC(面向对象 C 编程) ,感觉不错。遗憾的是上面没有提供继承的方法。根据本人的研究,在高老师的基础上,提出一 种可行而且结构明了的继承实现方法。至此,C 的 OO 编程中的封装、继承、多态都全实现了。现在 本人将其总结如下,希望对大家有帮助。 一、类的封装实现:借用高焕堂的宏头文件,类很容易封装为如下的格式 1、类的定义,其中 CLASS() 是 lw_oopc_kc.h 中定义的宏 #include "lw_oopc_kc.h" CLASS(A) { int a; void(*init)(void*,int); void(*put)(void*); }; 2、成员函数的实现 类的封装实质是用借用 struct 结构体,用函数指针来表示 C++中类的方法(成员函数) 。接下来给 类 A 的方法写实体函数。 void init_A(void *t,int x) { A *cthis = (A*)t; cthis->a = x; } void put_A(void*t) { A *cthis = (A*)t; printf(" %d ",cthis->a); } 3、类(结构体)中的函数指针与实现函数的关联 通过下面的宏把类的方法(函数指针)和实现函数关联: CTOR(A) FUNCTION_SETTING (init, init_A); FUNCTION_SETTING (put, put_A); END_CTOR
1
PDF 文件使用 "pdfFactory Pro" 试用版本创建
4、对象的定义、构造和初始化 如果没有这个连接处理,类(实际是 struct)中的函数指针就没有函数的功能。函数 init_A() 是 XXX_A() 的命名模式,是指明 XXX_A()属于 A 类的函数,方便程序的理解和维护。下面就是要构造 类。在 C++中这个工作系统自动调用构造函数实现而在 C 中,这个过程智能显示调用来实现。借助 lw_oopc_kc.h (或"lw_oopc.h")可以利用宏 CLASS_CTOR(class,obj)来将定义的对象进行构造,使之 有数据的同时有方法的功能。实例化一个对象 3 步子如下: A aa1; CLASS_CTOR(A,aa1); aa1.init(&aa1, 10); // 1、定义对象 // 2、构造对象—使得函数指针和函数关联 // 3、初始化对象的成员变量,注意要: &aa1(取地址)
//---子类调用父类的方式 //---输出类成员值
2
PDF 文件使用 "pdfFactory Pro" 试用版本创建
3、子类的构造函数,和无继承类一样,将函数指针和函数关联 CTOR(B) FUNCTION_SETTING (init, init_B); //---函数指针和函数关联的宏 FUNCTION_SETTING (put, put_B); END_CTOR 说明:对基类的构造,不能在子类的构造宏 CTOR(B) 和 END_CTOR 之间进行,因为那时候子类 B 没有实例化,故没有实体对象,CLASS_CTOR(A, cthis->A);不能放在里面,只好放在 init_B() 函数里面,因为那时候 B 类已经有实例化对象了。这样的做法与 C++的做法不一样。C++在构造 B 的对象时,先调用 A 类的构造函数实例化对象中的基类部分。下面为 main()函数的调用处理: int main() { A aa1; B b; CLASS_CTOR(A,aa1); //--构造 aa1 对象 aa1.init(&aa1,5); //--初始化 aa1 对象 aa1.put(&aa1); //--调用 aa1 对象的成员函数 CLASS_CTOR(B, b); b.init(&b,100,78); b.put(&b); b.A.put(&b.A); return 0; } 输出结果为:5 //---构造 b 对象 //--初始化 b 对象,包括基类 A 的构造和初始化 //--调用 b 对象成员函数 //--调用 b 对象的基类成员函数
5
PDF 文件使用 "pdfFactory Pro" 试用版本创建
对类内部成员的访问。 3、继承实现方法:用父类名在子类中定义一个对象作为子类的一个成员变量,通过拥有该对象实 现子类对父类功能的拥有,即继承。 注意:子类成员中用父类定义的对象,其构造函数要放在子类的初始化函数里(本人的解决方 法) ,因为子类的构造函数通过宏实现,不能直接调用父类的构造函数(如果您有更好办法,请和 给大家分享) 。 5、 函数和函数指针的写法:将函数名变为指针,函数参数只要参数说明。 e.g. double GetResult(double a,double b) 转为函数指针为: double (* GetResult)(double, double) ; -----------------------------------------------------------------------------------附:lw_oopc_kc.h 宏文件内容 /* lw_oopc_kc.h */ #ifndef _LW_OOPC_H #define _LW_OOPC_H #include <stdlib.h> #define CLASS(type) \ typedef struct type type; \ struct type #ifndef LW_OOPC_PURE_STATIC #ifndef LW_OOPC_STATIC #ifndef LW_OOPC_DYNAMIC #define CTOR(type) \ void* type##Setting(type*); \ void* type##New()\ { \ struct type *t; \ t = (struct type *)malloc(sizeof(struct type)); \ return type##Setting(t); \ } \ void* type##Setting(type *t) \ { #else #define CTOR(type) \ void* type##New()\ { \ struct type *t; \ t = (struct type *)malloc(sizeof(struct type)); #endif #else #define CTOR(type) \
3
PDF 文件使用 "pdfFactory Pro" 试用版本创建
2、 在加法类 Add 中实现接口 IOPERATOR /***** Add.C ***/ #include "lw_oopc_kc.h" #include"operater.h" // 头文件顺序很重要,lw_oopc_kc.h 在前,原因很简单不解释 #include "classes.h" /************************** 类 Add 定义在 classes.h 中 CLASS(Add) { IMPLEMENTS(IOPERATOR); };************/ static double GetResult(double a,double b) { return (a+b); } CTOR(Add) FUNCTION_SETTING(IOPERATOR.GetResult,GetResult); END_CTOR /***----- END OF ADD.C-----****/ 3、 在减法类 Sub 中实现接口 IOPERATOR /***--- Sub.c ---******/ #include "lw_oopc_kc.h" #include"operater.h" #include "classes.h" /***********类 Sub 定义在 classes.h 中 CLASS(Sub) { IMPLEMENTS(IOPERATOR); };*/ static double GetResult(double a,double b) { return (a-b); } CTOR(Sub) FUNCTION_SETTING(IOPERATOR.GetResult,GetResult); END_CTOR /***----- END OF Sub.C-----****/
int a = 10, b=5; int c1,c2; IOPERATOR *poper; Add A; Sub S;
//--定义接口指针,用指针实现多态 //---对象 A 成员函数实现加法 //---对象 B 成员函数实现减法
CLASS_CTOR(Add, A); CLASS_CTOR(Sub, S); //---静态内存处理方法 poper = &A; //也可以动态内存方法:oper = New(Add); 记得 free() c1 = (poper->GetResult(a,b)); // c1 的结果 = 15 ( a+b) poper = &S; c2 = poper->GetResult(a,b); // c2 结果= 5 (a-b) return 0; } /***----- END OF main.C-----****/ 总结: 1、在 lw_oopc_kc.h 的基础上,为了增加可理解性,不改变原作含义为前提下,增加了以下宏 #define CLASS_CTOR(Class,obj) #define INHERIT(BASE) Class##Setting(&obj) //--对象的构造宏 //---类继承宏
相关文档
最新文档