c语言模拟java面向对象_纯c语言实现面向对象分析与示例分享
#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语言实现面向对象分析与示例分享相关推荐
- 河南理工大学c语言报告封面,河南理工大学图书信息管理系统设计_纯c语言课程设计.doc...
河南理工大学图书信息管理系统设计_纯c语言课程设计 C语言课程设计报告 题 目:图书信息管理系统设计 河南理工大学计算机学院 目 录 第一章 题目与要求 1.1 问题提出1 1.2 本系统涉及的知识点 ...
- c语言实现协议层层消息,纯C语言实现面向对象分析与示例分享.pdf
纯C语言实现面向对象分析与示例分享 采用 语言实现的关键是如何运用 语言本身的特性来实现多态.继承面.封装的面向对 C C 象的特征最近给出了例子,大家可以参考使用 , C语言的对象化模型 面向对象的 ...
- c语言模拟java面向对象_面向对象设计模式C语言实现.PDF
第15卷第l1期 微机发展 V01.15NO.11 2005年11月 I)evdopment NOV.2()()5 Micrtxx)mpuler 面向对象设计模式的C语言实现 朱进 (东南大学软件学院 ...
- 用ram实现寄存器堆_纯C语言实现bootloader
之前有用很少一部分汇编实现过bootloader,但经过后来慢慢改进,发现是可以用纯C语言实现嵌入式操作系统的引导. 下面是之前对不能完全使用C语言引导系统的几点说明: 1.C程序中所有的代码都是以函 ...
- c语言不安全库_为什么 C 语言仍然占据统治地位?
作者 | Serdar Yegulalp 译者 | 王艳妮,责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 以下为译文: 没有什么技术可以应用长达50年之久,除非它真的比大多数其他东西都 ...
- c语言坦克大战程序设计,用纯C语言实现坦克大战
好久没给大家看有意思的C语言实现的代码了,今天给大家分享一个C语言实现坦克大战的游戏源码,依旧是纯C语言,点c文件,但是是在TC的环境下,运行效果截图如下: 上下左右控制方向,空格为发射炮弹,还带声音 ...
- 二级计算机c语言模拟考试程序,计算机二级c语言模拟考试题
在计算机二级考试中,我们会遇到什么样的考试内容呢?下面是学习啦小编给大家整理的计算机二级c语言模拟考试题,供大家参阅! 计算机二级c语言模拟考试题一级答案 1). 执行以下程序段后的输出结果是( ). ...
- c语言api文档_初学 C 语言没有项目练手?这 20 个小项目拿走不谢
C 语言是大多数人的编程入门语言,但很多初学者在学习的过程中难免会出现一些迷茫,比如:不知道 C 语言可以开发哪些项目,可以应用在哪些实际的开发中--今天我们收集了 20 个 C 语言练手项目,提供了 ...
- Linux c语言 creat参数,C++_使用C语言操作文件的基本函数整理,C语言creat()函数:创建文件函 - phpStudy...
使用C语言操作文件的基本函数整理 C语言creat()函数:创建文件函数 头文件: #include #include #include 定义函数: int creat(const char * pa ...
最新文章
- 助力中文文字识别突破,美团公开首个真实场景招牌图像数据集
- 今天来个爪哇去边框的小代码
- 软件概要设计和详细设计的区别
- 算法练习day1——190318(二分查找)
- Java与C、C++的区别
- bzoj 1295: [SCOI2009]最长距离
- 详解.NET IL代码(一)
- android sd media rw,Android 外部SD卡/U盤無法寫入解決方法(需要root)
- 何为量子计算机? | CSDN 博文精选
- 字节跳动面试必问:kafkagroupid数目
- jquery 弹出遮罩层
- ipconfig默认网关为空_网络工程师之IPCONFIG命令详解
- pandas—pandas.DataFrame.query与pandas.DataFrame.reset_index
- 计算机网络应用层1练习题
- 鼠标右键发现“新建功能菜单”不见了的解决方案
- blast2go mysql_从 Blast2GO 本地化聊一聊 Linux 下 MySQL 的源码安装
- 1300款主流单机游戏下载 大型PC电脑游戏使命14尼尔5模拟合集
- React之Redux
- 读写锁 -- ReentrantReadWriteLock
- CF513D Social Circles