用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

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

  • 12
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
1.1 习题参考解答 第2章 C++的初步知识 2.1 习题参考解答 2.2 上机实验题参考解答 第3章 类和对象 3.1 习题参考解答 3.2 上机实验题参考解答 第4章 类和对象的进一步讨论 4.1 习题参考解答 4.2 上机实验题参考解答 第5章 继承与派生 5.1 习题参考解答 5.2 上机实验题参考解答 第6章 多态性与虚函数 6.1 习题与参考解答 6.2 上机实验题与参考解答 第7章 运算符重载 7.1 习题参考解答 7.2 上机实验题参考解答 第8章 模板 8.1 习题参考解答 8.2 上机实验题参考解答 第9章 C++的输入和输出 9.1 习题参考解答 9.2 上机实验题参考解答 第10章 异常处理和命名空间 10.1 习题参考解答 10.2 上机实验题参考解答 第11章 综合设计与实现 11.1 习题参考解答 11.2 上机实验题参考解答 1.1 习题参考解答 【1.1】 【解】 面向过程程序设计的主要特征是:程序由过程定义和过程调用组成(所谓过程,简单地说,就是程序执行某项操作的一段代码,函数是最常用的过程。),从这个意义出发, 基于面向过程的程序可以用以下的公式来表述: 程序 = 过程 + 调用 【1.2】 【解】 面向过程程序设计中普遍采用的优化方法是使用结构化程序设计方法,其局限性至少有以下几个方面: (1) 面向过程程序设计方法开发软件的生产效率低下 (2) 面向过程程序设计方法难以应付日益庞大的信息量和多样的信息类型 (3) 面向过程程序设计方法难以适应各种新环境 【1.3】 【解】 面向对象程序设计是一种新的程序设计范型。这种范型的主要特征是: 程序 = 对象 + 消息 对于面向对象程序设计,程序员注重的是类的设计和编,即问题域中涉及几个类,各个类之间的关系如何,每个类包含哪些数据和函数(操作代码),再由类生成其对象。程序中的一切操作都是通过向对象发送消息来实现的,对象接收到消息后,启动有关方法(通过成员函数)完成相应的操作。 【1.4】 【解】 现实世界中的对象,具有以下特性: (1) 有一个名字:每一个对象必须有一个名字,称为对象名,以区别于其他对象; (2) 有一组属性:用属性来描述它的某些特征,一般可以用数据来表示,所有的属性都有值; (3) 有一组行为: 对象的行为或功能也称为方法,一般用一组操作来描述; (4) 有一组接口:除施加于对象内部的操作外,对象还提供了一组公有操作用于与外界接口,从而可以与其他对象建立关系。 【1.5】 【解】 在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。“类”就是具有相同的数据(属性)和相同的操作代码(函数)的一组对象的集合。 类和对象之间的关系是抽象和具体的关系。类是多个对象进行综合抽象的结果,一个对象是类的一个实例。 【1.6】 什么是消息? 【解】面向对象程序设计技术必须提供一种机制允许一个对象与另一个对象的交互。这种机制叫消息传递。一个对象向另一个对象发出的请求被称为“消息”。 【1.7】 【解】 在面向对象程序设计中的消息传递实际是对现实世界中的信息传递的直接模拟。调用对象中的函数就是向该对象传送一个消息,要求该对象实现某一行为(功能)。对象所能实现的行为(功能),在程序设计方法中称为方法,它们是通过调用相应的函数来实现的,在C++语言中方法是通过成员函数来实现的。 【1.8】 【解】 在面向对象程序设计中,抽象是通过特定的实例(对象)抽取共同特性后形成概念的过程。C和C++中的数据类型就是对一批具体的数的抽象。例如,“整型数据”是对所有整数的抽象。 封装是面向对象程序设计方法的一个重要特性,所谓封装具有两方面的含义:一是将有关的数据和操作代码封装在一个对象中,各个对象相对独立、相不干扰。二是将对象中某些数据与操作代码对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息隐蔽。信息隐蔽有利于数据安全,防止无关人员访问和修改数据。 【1.9】 【解】 以面向对象程序设计的观点,继承所表达的是类之间相关的关系。这种关系使得某一类可以继承另外一个类的特征和能力。 若类之间具有继承关系,则它们之间具有下列几个特性: (1) 类间具有共享特征(包括数据和操作代码的共享); (2) 类间具有差别或新增部分(包括非共享的数据和操作代码); (3) 类间具有层次结构。 【1.10】 【解】 从继承源来分,继承分为单继承和多继承。 单继承是指每个派生类只直接继承了一个基类的特征。例如,图1.1表示了一种单继承关系。它表示Windows操作系统的窗口之间的继承关系。
### 回答1: 《C面向对象程序设计第三版答案》是由谭浩强编的一本与C语言相关的教材辅导答案。C面向对象程序设计是计算机科学中的一门重要课程,谭浩强作为资深教授和编程专家,他撰的书籍在编程领域拥有很高的权威性。 这本教材答案为学习者提供了对应教材《C面向对象程序设计第三版》的习题答案和思考指导。习题是帮助学生巩固所学知识和提升编程能力的重要方式,通过对答案的学习,学生可以更好地理解并运用相关知识。学习者可以通过对比答案,分析解题思路、吸收优秀的编程风格和技巧,从而提高编程水平。 《C面向对象程序设计第三版答案》按照教材的章节顺序,详细解答了各个章节的习题,包括程序设计题、思考题、应用题等,涵盖了从基础的语法使用到复杂的程序设计技巧,旨在帮助学生全面理解并掌握C语言的面向对象编程思想和方法。 除了提供答案,这本教材还包括了一些习题的思考指导,指导学生如何分析问题、拆解问题、确定解决步骤等。这些思考指导帮助学生培养编程思维和解决问题的能力,使他们能够独立思考和解决实际编程任务。 总之,《C面向对象程序设计第三版答案》是一本为学习C语言面向对象程序设计的学生提供的辅助资料,它不仅提供了习题答案,还包括了思考指导,帮助学生提高编程水平和解决实际问题的能力。 ### 回答2: 《C++面向对象程序设计(第3版)》是计算机科学与技术专业学生的主要教材之一,由谭浩强编。这本书全面介绍了C++编程语言的面向对象编程思想和相关的概念、原则与技巧。 该教材内容分为15章,首先从C++的基本概念和语法入手,然后逐渐介绍了面向对象编程的思想和实现。每章的结尾都提供了习题和答案,帮助学生巩固所学知识。 《C++面向对象程序设计(第3版)》的答案是谭浩强根据书中习题所提供的参考答案。这些答案精确明确,清晰易懂,配有详细的解释和示范代码。通过阅读和理解这些答案,学生可以加深对所学知识的理解,提高自己的编程技能。 同时,这本书还提供了大量的示例代码和实践案例,帮助学生将理论知识应用于实际的编程项目中。通过实践,学生可以更好地理解面向对象编程的思想和方法,并培养自己的分析和解决问题的能力。 总之,《C++面向对象程序设计(第3版)》是一本权威性、系统性和实用性并存的教材。通过学习这本书,学生可以全面掌握C++编程语言和面向对象编程的相关知识,提高自己的编程能力,并为将来的实际工作打下坚实的基础。 ### 回答3: 《C++面向对象程序设计》(第三版)是谭浩强所著的一本教材,该教材主要介绍了C++面向对象程序设计的基本概念、语法和技巧。全书共分为10个章节,涵盖了面向对象程序设计的各个方面。 第一章介绍了C++的发展历程以及面向对象程序设计的基本概念和特点。第二章详细讲解了C++的基本语法和常用数据类型。第三章重点介绍了C++中的类和对象的概念,并通过具体的示例演示了如何定义和使用类。 第四章讲解了C++的继承和派生,介绍了单继承和多继承的概念以及如何定义和使用派生类。第五章介绍了C++中的多态性,包括静态多态和动态多态的概念以及如何使用虚函数实现动态绑定。 第六章讲解了C++中的运算符重载和类型转换,通过实例说明了如何重载运算符和类型转换函数。第七章介绍了C++中的异常处理机制,讲解了异常的概念和处理方法。 第八章讲解了C++中的文件操作,包括输入输出流、文件读以及文件指针的相关知识。第九章介绍了C++的模板和泛型编程,包括函数模板和类模板的定义和使用。 第十章介绍了C++中的标准模板库(STL),包括容器、迭代器、算法和函数对象等的使用方法。 《C++面向对象程序设计》(第三版)通过简明扼要的语言和生动具体的示例,全面而深入地介绍了C++面向对象程序设计的基本概念和技巧,适合初学者学习和参考。同时,该教材也提供了丰富的练习题和案例,供读者巩固和应用所学知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值