比如在一个项目中,有大量的数据结构,他们都是双向链表,但又想共用一套对链表的操作算法,这怎么做到呢,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)
————
(版权所有,如需转载,请注明出处及作者)
分享到:
相关推荐
在"www.pudn.com.txt"和"oopc"这两个文件中,"www.pudn.com.txt"可能是一个链接到资源网站的文本文件,提供了更多关于这个主题的信息,而"oopc"可能是实际的C源码文件,包含了实现C语言面向对象编程的具体代码示例。...
尽管C语言不具备内置的面向对象支持,但通过宏定义和特定的编码技巧,依然可以在C语言中实现面向对象编程的基本特征。这种方式被称为OOPC(Object-Oriented Programming with C)。 #### OOPC的关键技术 - **封装**...
"C++面向对象程序设计第三版谭浩强教学大纲.pdf" 本资源摘要信息涵盖了C++面向对象程序设计的基本概念、数据存储、程序设计初步、函数、数组、指针、用户自定义数据类型、类和对象的程序设计等方面的知识点。 第一...
2.面向对象程序设计语言有四个特征: ⑴ 抽象性 ---- 许多实体的共性产生类。 ⑵ 封装性 ---- 类将数据和操作封装为用户自定义的抽象数据类型。 ⑶ 继承性 ---- 类能被复用,具有继承(派生)机制。 ⑷ 多态性 ----...
Java面向对象程序设计是计算机科学中的一个重要主题,尤其在Java编程中。邢国波的《Java面向对象程序设计》一书旨在帮助读者理解和掌握Java语言的核心特性,特别是面向对象编程的概念。以下是根据提供的内容和标签...
C++语言继承了C语言的优点,并加入了面向对象编程的概念,成为了一种功能强大且灵活的程序设计语言。 1.1 C++语言的特点 * 静态类型:C++语言是一种静态类型的语言,变量的数据类型在编译时确定。 * 编译型:C++...
C++语言是实现面向对象编程的主要工具之一,由Bjarne Stroustrup于1983年在C语言的基础上扩展而来,旨在提供更高级别的抽象和模块化能力。 在学习面向对象编程时,首先要理解的是类(Class)和对象(Object)。类是...
1. 编写能够展示面向对象编程特点的Java程序,这些特点包括继承、多态、抽象类和接口。 2. 设计健壮的Java类,这些类通过异常处理和访问修饰符来使用。 3. 利用UML进行面向对象的设计。 4. 根据规范实现Java程序。 5...
通过上述代码,我们不仅成功地在C语言中模拟了面向对象编程的关键特性,而且还了解了如何通过信息隐藏、动态链接以及通用函数等方式来增强程序的灵活性和可扩展性。这种方法不仅适用于教学目的,对于实际项目开发也...
- C++是C语言的超集,保留了C的语法和效率,同时引入了面向对象的特性。 - C++中的类(Class)是实现面向对象的关键,它定义了一组数据成员和成员函数,数据成员是对象的状态,成员函数是对象的行为。 - 构造函数...
C++的特点在于,它既保留了C语言的灵活性,又引入了面向对象编程的特性。C++的新数据类型包括类,这是实现对象的基础。它还增加了新的语法,如访问修饰符(public, private, protected),以及构造函数、析构函数、...
1.C++ 的特点:C++ 是一种面向对象的编程语言,它继承了 C 语言的优点,并且增加了许多面向对象编程的特性,如封装、继承、多态等。C++ 对 C 的发展主要体现在以下几个方面:增加了面向对象编程的支持、提供了模板...
面向对象程序设计(Object-Oriented Programming,OOP)是一种基于对象概念的编程范式,它将数据结构和操作这些数据的方法封装在一起,形成对象,以此来实现代码的模块化和可重用性。OOP的主要特点包括封装、继承、...
《面向对象程序设计pdf》可能是吴晓涵教授讲解OOP理论和实践的详细教材,配合C/C++源码,读者可以深入理解OOP的实际应用和编程技巧。 通过阅读这本书和分析提供的源码,你将能够: 1. 学习如何定义和使用类,创建...
《C++面向对象程序设计》由谭浩强编写,涵盖了C++的基础知识、面向过程的编程、基于对象的编程以及面向对象的高级概念。这本书旨在帮助读者从C语言过渡到C++,理解C++的强大之处,包括其面向对象的特性。 在C++的...
C++ 是一种支持面向对象编程的强类型、编译型语言,由Bjarne Stroustrup在C语言的基础上发展而来,提供了丰富的面向对象特性,如类、继承、多态和封装等。 在"面向对象程序设计 PPT"中,我们可以期待学习以下几个...
面向对象程序设计(Object-Oriented Programming,OOP)是一种编程范式,它基于“对象”的概念,将数据和操作这些数据的方法封装在一起。在OOP中,对象是类的实例,类是对象的蓝图。C#是一种强大的、类型安全的、...
面向对象程序设计概述ppt.ppt是讲解面向对象程序设计的概述,主要介绍了面向对象程序设计的概念、特征、优点、与面向过程程序设计的比较、对象和类的概念等。 面向对象程序设计概述 面向对象程序设计是一种以对象...
面向对象程序设计是一种广泛应用于现代软件开发中的编程范式,它基于“对象”的概念,将数据和操作数据的方法封装在一起,以实现代码的模块化和重用性。本压缩包包含八份面向对象程序设计的试题,旨在帮助学习者深入...