1.通用校验器接口(validator.h)

 #ifndef VALIDATOR_H_INCLUDED
#define VALIDATOR_H_INCLUDED #include<stdbool.h> typedef struct _Validator{
bool (*const validate)(struct _Validator *pThis, int value);
}Validator; typedef struct{
Validator isa; //结构体成员
const int min;
const int max;
} RangeValidator; typedef struct{
Validator isa; //结构体成员
bool isEven;
} OddEvenValidator; bool validateRange(Validator *pThis, int value); // 范围校验器函数
bool validateOddEven(Validator *pThis, int value); // 奇偶校验器函数
#define newRangeValidator(min, max) {{validateRange}, (min), (max)} // 初始化RangeValidator
#define newOddEvenValidator(isEven) {{validateOddEven}, (isEven)} // 初始化OddEvenValidator #endif // VALIDATOR_H_INCLUDED

2.通用校验器接口实现(validator.c)

 #include "validator.h"

 bool validateRange(Validator *pThis, int value)
{
RangeValidator *pRangeValidator = (RangeValidator *)pThis;
return pRangeValidator -> min <= value && value <= pRangeValidator -> max;
} bool validateOddEven(Validator *pThis, int value)
{
OddEvenValidator *pOddEvenValidator = (OddEvenValidator *)pThis;
return (!pOddEvenValidator -> isEven && (value % )) || (pOddEvenValidator -> isEven && !(value % ));
}

3.通用校验器使用范例程序

 #include <stdio.h>
#include "validator.h" int main()
{
int num;
RangeValidator rangeValidator = newRangeValidator(, );// 初始化RangeValidator
Validator *pValidator = &rangeValidator.isa;
printf("Pease input an integer: ");
scanf("%d",&num);
printf("\n"); if(pValidator->validate(pValidator,num) == true)
{
printf("The %d in range of 1 to 10\n",num);
}
else
{
printf("The %d not in range of 1 to 10\n",num);
}
printf("\n"); OddEvenValidator oddEvenValidator = newOddEvenValidator(true);// 初始化OddEvenValidator
pValidator = &oddEvenValidator.isa; printf("Pease input an integer: ");
scanf("%d",&num);
printf("\n"); if(pValidator->validate(pValidator,num) == true)
{
printf("The %d is an even.\n",num);
}
else
{
printf("The %d is an odd.\n",num);
}
return ;
}

c语言实现面向对象编程的更多相关文章

  1. C 语言实现面向对象编程

    转载 https://blog.csdn.net/onlyshi/article/details/81672279 C 语言实现面向对象编程1.引言面向对象编程(OOP)并不是一种特定的语言或者工具, ...

  2. 基于C语言的面向对象编程

    嵌入式软件开发中,虽然很多的开发工具已经支持C++的开发,但是因为有时考虑运行效率和编程习惯,还是有很多人喜欢用C来开发嵌入式软件.Miro Samek说:"我在开发现场发现,很多嵌入式软件 ...

  3. 一步步分析:C语言如何面向对象编程

    这是道哥的第009篇原创 一.前言 在嵌入式开发中,C/C++语言是使用最普及的,在C++11版本之前,它们的语法是比较相似的,只不过C++提供了面向对象的编程方式. 虽然C++语言是从C语言发展而来 ...

  4. 真的可以啊,用C语言实现面向对象编程O O P!C语言真的无所不能~

    解释区分一下C语言和OOP 我们经常说C语言是面向过程的,而C++是面向对象的,然而何为面向对象,什么又是面向过程呢?不管怎么样,我们最原始的目标只有一个就是实现我们所需要的功能,从这一点说它们是殊途 ...

  5. Python源代码 -- C语言实现面向对象编程(基类&amp;派生类&amp;多态)

    背景 python是面向对象的解释性语言.然而python是通过C语言实现的,C语言怎么跟面向对象扯上了关系? C语言能够实现面向对象的性质? 原文链接:http://blog.csdn.net/or ...

  6. 真的可以,用C语言实现面向对象编程OOP

    ID:技术让梦想更伟大 作者:李肖遥 解释区分一下C语言和OOP 我们经常说C语言是面向过程的,而C++是面向对象的,然而何为面向对象,什么又是面向过程呢?不管怎么样,我们最原始的目标只有一个就是实现 ...

  7. Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量

    1 第一个OC控制台程序 1.1 问题 Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序.其运行于苹果公司的Mac操作系统下. 本案例要求使用集成 ...

  8. C语言进行面向对象编程

    http://blog.csdn.net/dadalan/article/details/3983888 http://blog.163.com/zhqh43@126/blog/static/4043 ...

  9. 云风:我所偏爱的C语言面向对象编程范式

    面向对象编程不是银弹.大部分场合,我对面向对象的使用非常谨慎,能不用则不用.相关的讨论就不展开了. 但是,某些场合下,采用面向对象的确是比较好的方案.比如 UI 框架,又比如 3d 渲染引擎中的场景管 ...

随机推荐

  1. 第四篇,JavaScript面试题汇总

    JavaScript是一种属于网络的脚本语言,已经被广泛用于web实用开发,常用来为网页添加各种各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ...

  2. Unity中引入Supersocket.ClientEngine并测试

    在使用Supersocket Server的过程中,发现Server是不支持.net 3.5的. 1.Server端中的几个Command: namespace SuperSocketProtoSer ...

  3. Bootstrap框架学习

    Bootstrap框架个人总结 https://blog.csdn.net/To_Front_End/article/details/51142716 Bootstrap 教程 https://www ...

  4. deepin linux 安装之后 引导错误 出现 grub>

    deepin 安装之后 引导错误 ,,, 忙了一晚上 终于解决了 太辛苦了 不过明白了grub的工作原理也不亏,,,, 就是 整个过程满满的绝望 (哭 环境说明 华硕顽石4 笔记本 硬盘分区表GPT ...

  5. java程序员摸爬滚打的三年,这些经历你值得借鉴

    不知不觉都2020年2月底了,小羊同学从毕业快开始都一直从事java开发这个行业,前两天开通了头条号,想借此发文分享一下这几年的经历吧,如果你是还没毕业的大学生或者刚入行不久,也许会对你有帮助. 1: ...

  6. redis5.0.7安装及配置集群

    1.安装环境linux系统,时间2020年2月 2.官网下载https://redis.io/ 3.解压 tar -zxvf redis-5.0.7.tar.gz 4.配置文件 //创建etc文件夹, ...

  7. AC3 channel coupling

    1.overview 如果使用channel coupling, encoder端计算所有channel的transform coefficients的平均值,将平均值压缩到coupling chan ...

  8. 【C语言】多维数组

    C 语言支持多维数组.多维数组声明的一般形式如下: type name[size1][size2]...[sizeN]; 二维数组 多维数组最简单的形式是二维数组.一个二维数组,在本质上,是一个一维数 ...

  9. 19年SD夏令营游记

    首先,因为自己的刻苦学习(tui),所以游记很短,勿喷... 7.22.2019——报到 话说昨晚热到12点才睡着,在路上大家一直都在玩游戏,没有游戏可玩的我听着歌发呆... 到了山东省外国语职业技术 ...

  10. 劳动人民万岁(拒绝惰性)------- 浅谈迭代对象(Iterable) 迭代器(Iterator)

    一.前戏 问题:如果一次抓取所有城市天气 再显示,显示第一个城市气温时有很高的延时,并且很浪费储存空间 解决方案:以“用时访问”策略,并且能把说有城市气温封装到一个对象里,可用for一句进行迭代 二. ...