#include

#include

//接口

#ifndef Interface

#define Interface struct

#endif

//类

#ifndef Class

#define Class struct

#endif

//抽象形状类

Class Shape;

typedef Class Shape shape;

//抽象形状类的方法声明

shape* Shape(int edges);

int shape_getEdges(shape *);

int shape_getArea(void);

void _Shape(shape *);

//三角形类

Class Triangle;

typedef Class Triangle triangle;

//三角形类的方法声明

triangle * Triangle(int bottom, int height);

int triangle_getEdges(triangle *);

int triangle_getArea(triangle *);

void _Triangle(triangle *);

//矩形类

Class Rectangle;

typedef Class Rectangle rectangle;

//矩形类的方法声明

rectangle * Rectangle(int bottom, int height);

int rectangle_getEdges(rectangle *);

int rectangle_getArea(rectangle *);

void _Rectangle(rectangle *);

//抽象形状类实现

Class Shape

{

int edges;

int (*getEdges)(shape*);

int (*getArea)(void);

};

//形状类构造函数

shape* Shape(int edges)

{

shape * obj = (shape *) malloc(sizeof(shape));

obj->edges = edges;

obj->getEdges = shape_getEdges;

obj->getArea = shape_getArea;

return obj;

}

int shape_getEdges(shape* obj)

{

return obj->edges;

}

int shape_getArea(void)

{

return -1;

}

//形状类析构函数

void _Shape(shape * obj)

{

if(obj == NULL)

return;

free(obj);

}

//三角形类实现

Class Triangle

{

shape * super;

int bottom;

int height;

int (*getEdges)(triangle *);

int (*getArea)(triangle *);

};

//三角形类构造函数

triangle * Triangle(int bottom, int height)

{

triangle* obj = (triangle*) malloc(sizeof(triangle));

//调用Shape构造函数用于实现继承

obj->super = Shape(3);

obj->bottom = bottom;

obj->height = height;

obj->getEdges = triangle_getEdges;

obj->getArea = triangle_getArea;

return obj;

}

int triangle_getEdges(triangle * obj)

{

return obj->super->edges;

}

int triangle_getArea(triangle * obj)

{

return (obj->bottom * obj->height) / 2;

}

//三角形类析构函数

void _Triangle(triangle * triangle)

{

_Shape(triangle->super);

if(triangle == NULL)

{

return;

}

free(triangle);

}

//矩形类实现

Class Rectangle

{

shape * super;

int bottom;

int height;

int (*getEdges)(rectangle *);

int (*getArea)(rectangle *);

};

//矩形类构造函数

rectangle * Rectangle(int bottom, int height)

{

rectangle * obj = (rectangle *)malloc(sizeof(rectangle));

//调用Shape构造函数用于实现继承

obj->super = Shape(4);

obj->bottom = bottom;

obj->height = height;

obj->getEdges = rectangle_getEdges;

obj->getArea = rectangle_getArea;

return obj;

}

int rectangle_getEdges(rectangle * obj)

{

return obj->super->edges;

}

int rectangle_getArea(rectangle * obj)

{

return (obj->bottom * obj->height);

}

//矩形类析构函数

void _Rectangle(rectangle * obj)

{

_Shape(obj->super);

if(obj == NULL)

{

return;

}

free(obj);

}

//测试

void main(){

shape* shapeObj = Shape(0);

printf("%d\n", shapeObj->getEdges(shapeObj));

printf("%d\n", shapeObj->getArea());

_Shape(shapeObj);

triangle* triangleObj = Triangle(4, 5);

printf("%d\n", triangleObj->getEdges(triangleObj));

printf("%d\n", triangleObj->getArea(triangleObj));

_Triangle(triangleObj);

rectangle* rectangleObj = Rectangle(4, 5);

printf("%d\n", rectangleObj->getEdges(rectangleObj));

printf("%d\n", rectangleObj->getArea(rectangleObj));

_Rectangle(rectangleObj);

}

c语言模拟java面向对象_纯c语言实现面向对象分析与示例分享相关推荐

  1. 河南理工大学c语言报告封面,河南理工大学图书信息管理系统设计_纯c语言课程设计.doc...

    河南理工大学图书信息管理系统设计_纯c语言课程设计 C语言课程设计报告 题 目:图书信息管理系统设计 河南理工大学计算机学院 目 录 第一章 题目与要求 1.1 问题提出1 1.2 本系统涉及的知识点 ...

  2. c语言实现协议层层消息,纯C语言实现面向对象分析与示例分享.pdf

    纯C语言实现面向对象分析与示例分享 采用 语言实现的关键是如何运用 语言本身的特性来实现多态.继承面.封装的面向对 C C 象的特征最近给出了例子,大家可以参考使用 , C语言的对象化模型 面向对象的 ...

  3. c语言模拟java面向对象_面向对象设计模式C语言实现.PDF

    第15卷第l1期 微机发展 V01.15NO.11 2005年11月 I)evdopment NOV.2()()5 Micrtxx)mpuler 面向对象设计模式的C语言实现 朱进 (东南大学软件学院 ...

  4. 用ram实现寄存器堆_纯C语言实现bootloader

    之前有用很少一部分汇编实现过bootloader,但经过后来慢慢改进,发现是可以用纯C语言实现嵌入式操作系统的引导. 下面是之前对不能完全使用C语言引导系统的几点说明: 1.C程序中所有的代码都是以函 ...

  5. c语言不安全库_为什么 C 语言仍然占据统治地位?

    作者 | Serdar Yegulalp 译者 | 王艳妮,责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 以下为译文: 没有什么技术可以应用长达50年之久,除非它真的比大多数其他东西都 ...

  6. c语言坦克大战程序设计,用纯C语言实现坦克大战

    好久没给大家看有意思的C语言实现的代码了,今天给大家分享一个C语言实现坦克大战的游戏源码,依旧是纯C语言,点c文件,但是是在TC的环境下,运行效果截图如下: 上下左右控制方向,空格为发射炮弹,还带声音 ...

  7. 二级计算机c语言模拟考试程序,计算机二级c语言模拟考试题

    在计算机二级考试中,我们会遇到什么样的考试内容呢?下面是学习啦小编给大家整理的计算机二级c语言模拟考试题,供大家参阅! 计算机二级c语言模拟考试题一级答案 1). 执行以下程序段后的输出结果是( ). ...

  8. c语言api文档_初学 C 语言没有项目练手?这 20 个小项目拿走不谢

    C 语言是大多数人的编程入门语言,但很多初学者在学习的过程中难免会出现一些迷茫,比如:不知道 C 语言可以开发哪些项目,可以应用在哪些实际的开发中--今天我们收集了 20 个 C 语言练手项目,提供了 ...

  9. Linux c语言 creat参数,C++_使用C语言操作文件的基本函数整理,C语言creat()函数:创建文件函 - phpStudy...

    使用C语言操作文件的基本函数整理 C语言creat()函数:创建文件函数 头文件: #include #include #include 定义函数: int creat(const char * pa ...

最新文章

  1. 助力中文文字识别突破,美团公开首个真实场景招牌图像数据集
  2. 今天来个爪哇去边框的小代码
  3. 软件概要设计和详细设计的区别
  4. 算法练习day1——190318(二分查找)
  5. Java与C、C++的区别
  6. bzoj 1295: [SCOI2009]最长距离
  7. 详解.NET IL代码(一)
  8. android sd media rw,Android 外部SD卡/U盤無法寫入解決方法(需要root)
  9. 何为量子计算机? | CSDN 博文精选
  10. 字节跳动面试必问:kafkagroupid数目
  11. jquery 弹出遮罩层
  12. ipconfig默认网关为空_网络工程师之IPCONFIG命令详解
  13. pandas—pandas.DataFrame.query与pandas.DataFrame.reset_index
  14. 计算机网络应用层1练习题
  15. 鼠标右键发现“新建功能菜单”不见了的解决方案
  16. blast2go mysql_从 Blast2GO 本地化聊一聊 Linux 下 MySQL 的源码安装
  17. 1300款主流单机游戏下载 大型PC电脑游戏使命14尼尔5模拟合集
  18. React之Redux
  19. 读写锁 -- ReentrantReadWriteLock
  20. CF513D Social Circles

热门文章

  1. Hadoop小知识点
  2. 一道Js判断对象是否相等面试题引发的故事
  3. Object Pools 喷泉效果实现
  4. Codeforces 835 F Roads in the Kingdom(树形dp)
  5. 用 vue2 和 webpack 快速建构 NW.js 项目(1)
  6. 工业控制系统专业术语(不断完善中)
  7. JAVA中线程同步的方法
  8. 右键单击文件夹进入命令行窗口
  9. 纯函数式编程语言_纯功能编程语言如何改变您的生活。
  10. node.js事件驱动_了解Node.js事件驱动架构