`
javatgo
  • 浏览: 1189255 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

用C写有面向对象特点的程序

阅读更多

比如在一个项目中,有大量的数据结构,他们都是双向链表,但又想共用一套对链表的操作算法,这怎么做到呢,C中又没有C++中的继承,不然我可以继承一父(类中只有两个指针,一个向前一个向后),而其算法可以写在你类中的虚函数中,供子类使用。如:

class Links
{
public:
Links* back;
Links* forword;

virtual Add(){ ... };
virtual Del(){ ... };
virtual Ins(){ ... };
virtual Print() =0;
....

};

于是对于特定的数据结构我们可以:
class mylinks : public Links
{
public:
char* myname;
char sex;
int age;
...
virtual Print(){ .... }

};
对其操作时都可以使用你类的泛型算法。


在C中,该如何做呢?我们用C中的指针和强制类型转可以做到。

下面是我总结出来的一个小的程序,体现了用指针的弹性来实现这一继承的效果:
(我在Liniux下的GCC调试通过)

=======================================

#include <stdio.h>

/* 双向链表 (类似于父类)*/
typedef struct hLinks{
struct hLinks *bwLink;
struct hLinks *fwLink;
} hLinks;


/*
* 一个使用双向链表的结构
* (类似于子类)
*/
typedef struct hEnt{
hLinks links;
int hData;
char key[10];
} hEnt;


/*
* 双向链插入泛型算法 (类似于父数中的成员函数)
*/
Insert( hLinks* elem, hLinks *dest )
{
if ( !elem || !dest ) return;

elem->bwLink = dest->bwLink;
elem->fwLink = dest;
dest->bwLink->fwLink = elem;
dest->bwLink = elem;
}


/*
* 打印 (类似于子类重载父类的成员函数)
*/
PrintLink( hLinks *h )
{
hEnt *p ;

for( p = ( hEnt* ) h->fwLink; /* <-----------把hLink再转回来 */
p != ( hEnt* ) h;
p = ( hEnt* )( (hLinks*)p )->fwLink )
{
printf("hData=[%d], key=[%s]\n", p->hData, p->key);
}
}

main()
{
hLinks head;
hEnt a[4];
int i;

head.bwLink = &head;
head.fwLink = &head;

for(i=0;i<4;i++)
{
a[i].hData = i*10;
sprintf(a[i].key,"id=%d", i);

/* 使用泛型算法构造双向链 */
Insert( (hLinks *) &a[i], (hLinks *) &head ); /* <-----注意这个强制转换 */
}

PrintLink( (hLinks *) &head ); /* <-------也注意这个强制转换 */
}

其实,C++就是把C++翻译成C,再编译,所以编译好慢。我这里的这个动作可能类似C++转成C后的样子吧。大家多交流(litmouse@km169.net

————
(版权所有,如需转载,请注明出处及作者)

分享到:
评论

相关推荐

    oopc.rar_C语言_C语言面向对象_c语言 面向对象_oopc_面向对象

    在"www.pudn.com.txt"和"oopc"这两个文件中,"www.pudn.com.txt"可能是一个链接到资源网站的文本文件,提供了更多关于这个主题的信息,而"oopc"可能是实际的C源码文件,包含了实现C语言面向对象编程的具体代码示例。...

    C语言中的面向对象编程技术.pp(中文翻译版)

    尽管C语言不具备内置的面向对象支持,但通过宏定义和特定的编码技巧,依然可以在C语言中实现面向对象编程的基本特征。这种方式被称为OOPC(Object-Oriented Programming with C)。 #### OOPC的关键技术 - **封装**...

    c++面向对象程序设计第三版谭浩强教学大纲.pdf

    "C++面向对象程序设计第三版谭浩强教学大纲.pdf" 本资源摘要信息涵盖了C++面向对象程序设计的基本概念、数据存储、程序设计初步、函数、数组、指针、用户自定义数据类型、类和对象的程序设计等方面的知识点。 第一...

    C++面向对象程序设计课后答案

    2.面向对象程序设计语言有四个特征: ⑴ 抽象性 ---- 许多实体的共性产生类。 ⑵ 封装性 ---- 类将数据和操作封装为用户自定义的抽象数据类型。 ⑶ 继承性 ---- 类能被复用,具有继承(派生)机制。 ⑷ 多态性 ----...

    习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf

    Java面向对象程序设计是计算机科学中的一个重要主题,尤其在Java编程中。邢国波的《Java面向对象程序设计》一书旨在帮助读者理解和掌握Java语言的核心特性,特别是面向对象编程的概念。以下是根据提供的内容和标签...

    c++面向对象程序设计语言重点难点复习题及答案-整理.pdf

    C++语言继承了C语言的优点,并加入了面向对象编程的概念,成为了一种功能强大且灵活的程序设计语言。 1.1 C++语言的特点 * 静态类型:C++语言是一种静态类型的语言,变量的数据类型在编译时确定。 * 编译型:C++...

    面向对象程序设计与C++语言

    C++语言是实现面向对象编程的主要工具之一,由Bjarne Stroustrup于1983年在C语言的基础上扩展而来,旨在提供更高级别的抽象和模块化能力。 在学习面向对象编程时,首先要理解的是类(Class)和对象(Object)。类是...

    SSD3 面向对象程序设计 pdf

    1. 编写能够展示面向对象编程特点的Java程序,这些特点包括继承、多态、抽象类和接口。 2. 设计健壮的Java类,这些类通过异常处理和访问修饰符来使用。 3. 利用UML进行面向对象的设计。 4. 根据规范实现Java程序。 5...

    用C实现面向对象,帮你理解面向对象

    通过上述代码,我们不仅成功地在C语言中模拟了面向对象编程的关键特性,而且还了解了如何通过信息隐藏、动态链接以及通用函数等方式来增强程序的灵活性和可扩展性。这种方法不仅适用于教学目的,对于实际项目开发也...

    面向对象程序设计(C++语言描述)教程

    - C++是C语言的超集,保留了C的语法和效率,同时引入了面向对象的特性。 - C++中的类(Class)是实现面向对象的关键,它定义了一组数据成员和成员函数,数据成员是对象的状态,成员函数是对象的行为。 - 构造函数...

    c++面向对象程序设计课件

    C++的特点在于,它既保留了C语言的灵活性,又引入了面向对象编程的特性。C++的新数据类型包括类,这是实现对象的基础。它还增加了新的语法,如访问修饰符(public, private, protected),以及构造函数、析构函数、...

    c++面向对象程序设计课后习题解答-谭浩强

    1.C++ 的特点:C++ 是一种面向对象的编程语言,它继承了 C 语言的优点,并且增加了许多面向对象编程的特性,如封装、继承、多态等。C++ 对 C 的发展主要体现在以下几个方面:增加了面向对象编程的支持、提供了模板...

    面向对象程序设计ppt

    面向对象程序设计(Object-Oriented Programming,OOP)是一种基于对象概念的编程范式,它将数据结构和操作这些数据的方法封装在一起,形成对象,以此来实现代码的模块化和可重用性。OOP的主要特点包括封装、继承、...

    面向对象结构分析程序设计_吴晓涵1,面向对象程序设计pdf,C,C++源码.zip

    《面向对象程序设计pdf》可能是吴晓涵教授讲解OOP理论和实践的详细教材,配合C/C++源码,读者可以深入理解OOP的实际应用和编程技巧。 通过阅读这本书和分析提供的源码,你将能够: 1. 学习如何定义和使用类,创建...

    C++_面向对象程序设计_谭浩强 word完整版

    《C++面向对象程序设计》由谭浩强编写,涵盖了C++的基础知识、面向过程的编程、基于对象的编程以及面向对象的高级概念。这本书旨在帮助读者从C语言过渡到C++,理解C++的强大之处,包括其面向对象的特性。 在C++的...

    面向对象程序设计 PPT

    C++ 是一种支持面向对象编程的强类型、编译型语言,由Bjarne Stroustrup在C语言的基础上发展而来,提供了丰富的面向对象特性,如类、继承、多态和封装等。 在"面向对象程序设计 PPT"中,我们可以期待学习以下几个...

    面向对象程序设计代码

    面向对象程序设计(Object-Oriented Programming,OOP)是一种编程范式,它基于“对象”的概念,将数据和操作这些数据的方法封装在一起。在OOP中,对象是类的实例,类是对象的蓝图。C#是一种强大的、类型安全的、...

    面向对象程序设计概述ppt.ppt

    面向对象程序设计概述ppt.ppt是讲解面向对象程序设计的概述,主要介绍了面向对象程序设计的概念、特征、优点、与面向过程程序设计的比较、对象和类的概念等。 面向对象程序设计概述 面向对象程序设计是一种以对象...

    面向对象程序设计试题8份

    面向对象程序设计是一种广泛应用于现代软件开发中的编程范式,它基于“对象”的概念,将数据和操作数据的方法封装在一起,以实现代码的模块化和重用性。本压缩包包含八份面向对象程序设计的试题,旨在帮助学习者深入...

Global site tag (gtag.js) - Google Analytics