`
varsoft
  • 浏览: 2454204 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

用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

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

分享到:
评论

相关推荐

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

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

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

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

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

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

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

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

    《C--面向对象程序设计》习题与上机解答-提交稿-陈维兴

    对于面向对象的程序设计,程序员注重的是类的设计和编写,即问题域中涉及几个类,各个类之间的关系如何,每个类包含哪些数据和函数(操作代码),再由类生成其对象。程序中的一切操作都是通过向对象发送消息来实现的...

    第一章JAVA面向对象的程序设计.doc

    1:观念的转变(从面向过程---面向对象),要忘记“C语言”,又要记住“C语言”。 2:强调实践(程序设计语言相同的特点) 3:充分利用网络资源(现代人的学习方法) 三:作业与考试 1:平时作业,上机完成。多...

    C++面向对象程序设计教程(第3版)—-陈维兴-林小茶课后习题答案

    本资源是C++面向对象程序设计教程的课后习题答案,涵盖了面向对象程序设计的基本概念、C++语言的特点、面向对象程序设计的优点等知识点。 1.1 面向对象程序设计的定义 面向对象程序设计是一种新的程序设计范型。...

    零基础入学c语言+C语言概述以及如何上机运行+C语言的特点+面对过程和面向对象的程序设计思想+简单的C程序介绍

    零基础入学c语言+C语言概述以及如何上机运行+C语言的特点+面对过程和面向对象的程序设计思想+简单的C程序介绍 1. C语言概述 1.1C语言的发展过程 C语言是在 70 年代初问世的。一九七八年由美国电话电报公司(AT...

    C++面向对象程序设计详解

    C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。 ...

    Java面向对象编程思想

    以前总听老师说c语言是面向过程的,c++和java是面向对象的,这些糊涂老师却从来不说明何为面向过程,何为面向对象,搞得我一直对此稀里糊涂。 最近看了不少的资料,在这里总结一下对此的心得体会。 所有的计算机程序...

    面向对象考试试卷A(2014).doc

    有关C++的一些资料,对C++的一些基本定义,C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。...

    面向对象程序设计教程答案解析.doc

    (1) 目前有面向过程的结构化程序设计方法和面向对象的程序设计方法两种重要的程序设计方法。 (2) 结构化程序设计方法中的模块由顺序、选择和循环 3 种基本结构组成。 (3) 在结构化程序设计方法中,程序可...

    刘振安-面向对象程序设计 C++

    C语言是结构化程序设计语言,它的程序设计特点就是函数设计。同样,C++语言的类也离不开函数。 本章将通过一个实际的例子,介绍C++如何兼容面向过程设计、它的基本程序结构及其在函数设计上与C语言的异同。然后给出...

    计算机C语言外文翻译外文文献英文文献面向对象和C

    计算机C语言外文翻译外文文献英文文献面向对象和C 计算机C语言外文翻译外文文献英文文献面向对象和C是一个重要的概念,在...它结合了C语言和面向对象编程的特点,可以用来编写各种类型的程序,提高编程效率和质量。

    面向对象程序设计习题.doc

    对象内部数据结构的不可访问性 [解析]输入数据必须输入保密口令和数据经过加密处理都不是面向对象程序设计的特征 ;对象内部数据结构上也不可能建有防火墙,所以它们都不是面向对象程序设计中所指 的数据隐藏。面向...

    面向对象的理论与C++实践

    本书主要介绍面向对象的理论及如何用C++这个语言工具来实现面向对象编程。本书的特点是理论与实践紧密结合,使读者在理论的同时,掌握如何实际实现。  本书共分为两篇:理论篇和实践篇。理论篇共六章,主要介绍...

    面向对象的程序设计(类和对象)

    • 类与对象是面向对象程序设计OOP(Object-Oriented Programming)的基础,是c++区别于c的主要特征 • 面向对象与面向过程的区别 – 函数与它所操作的数据密切相关,相互依赖,特定的函数往往对 特定的数据结构进行...

    C语言程序设计(PDF格式)

    10.1.1 面向对象的程序结构 205 10.1.2 C++的类 206 10.2 C++的输入与输出 207 10.3 类与对象 208 10.3.1 类的定义与对象的引用 209 10.3.2 构造函数与析构函数 211 10.3.3 函数重载 215 10.3.4 友元 216 10.4 对象...

    C++面向对象程序设计第02章.ppt

    C++面向对象程序设计第二章 本章主要介绍了C++语言的概述,包括C++的起源、特点、构成等。下面是本章的详细知识点: 一、C++的起源 C++语言是由Bjarne Stroustrup博士在1980年设计的,以C语言为基础,旨在解决...

    C++面向对象程序设计教程(第3版)—-陈维兴,林小茶课后习题答案.pdf

    本教程主要介绍了面向对象程序设计的基本概念和C++语言的特点。面向对象程序设计是一种新的程序设计范型,具有对象、类、继承、多态等特征。程序设计的主要优点是提高程序的重用性、控制程序的复杂性、改善程序的可...

Global site tag (gtag.js) - Google Analytics