c语言实现面向对象编程
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语言实现面向对象编程的更多相关文章
- C 语言实现面向对象编程
转载 https://blog.csdn.net/onlyshi/article/details/81672279 C 语言实现面向对象编程1.引言面向对象编程(OOP)并不是一种特定的语言或者工具, ...
- 基于C语言的面向对象编程
嵌入式软件开发中,虽然很多的开发工具已经支持C++的开发,但是因为有时考虑运行效率和编程习惯,还是有很多人喜欢用C来开发嵌入式软件.Miro Samek说:"我在开发现场发现,很多嵌入式软件 ...
- 一步步分析:C语言如何面向对象编程
这是道哥的第009篇原创 一.前言 在嵌入式开发中,C/C++语言是使用最普及的,在C++11版本之前,它们的语法是比较相似的,只不过C++提供了面向对象的编程方式. 虽然C++语言是从C语言发展而来 ...
- 真的可以啊,用C语言实现面向对象编程O O P!C语言真的无所不能~
解释区分一下C语言和OOP 我们经常说C语言是面向过程的,而C++是面向对象的,然而何为面向对象,什么又是面向过程呢?不管怎么样,我们最原始的目标只有一个就是实现我们所需要的功能,从这一点说它们是殊途 ...
- Python源代码 -- C语言实现面向对象编程(基类&派生类&多态)
背景 python是面向对象的解释性语言.然而python是通过C语言实现的,C语言怎么跟面向对象扯上了关系? C语言能够实现面向对象的性质? 原文链接:http://blog.csdn.net/or ...
- 真的可以,用C语言实现面向对象编程OOP
ID:技术让梦想更伟大 作者:李肖遥 解释区分一下C语言和OOP 我们经常说C语言是面向过程的,而C++是面向对象的,然而何为面向对象,什么又是面向过程呢?不管怎么样,我们最原始的目标只有一个就是实现 ...
- Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量
1 第一个OC控制台程序 1.1 问题 Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序.其运行于苹果公司的Mac操作系统下. 本案例要求使用集成 ...
- C语言进行面向对象编程
http://blog.csdn.net/dadalan/article/details/3983888 http://blog.163.com/zhqh43@126/blog/static/4043 ...
- 云风:我所偏爱的C语言面向对象编程范式
面向对象编程不是银弹.大部分场合,我对面向对象的使用非常谨慎,能不用则不用.相关的讨论就不展开了. 但是,某些场合下,采用面向对象的确是比较好的方案.比如 UI 框架,又比如 3d 渲染引擎中的场景管 ...
随机推荐
- C语言-宏定义与使用分析
1.C语言中的宏定义 #define是预处理器处理的单元实体之— #define定义的宏可以出现在程序的任意位置 #define定义之后的代码都可以使用这个宏 2.定义宏常量 #define定义的宏常 ...
- 文艺平衡树 lg3391(splay维护区间入门)
splay是支持区间操作的,先做这道题入个门 大多数操作都和普通splay一样,就不多解释了,只解释一下不大一样的操作 #include<bits/stdc++.h> using name ...
- 解决 genymotion 安装apk报错 app contains ARM native code and your Genymotion device cannot run ARM instructions
1.某些APP安装在模拟器时提示“ this probably means that the app contains ARM native code and your Genymotion devi ...
- Java基础小知识(一)
序言:“不积跬步,无以至千里.不积小流,无以成江海.”每一个庞大的知识架构都是由无数个小知识点慢慢积累起来的,没有量变的积累,就没有质变上的飞跃,成功往往离不开积累. 今天就和大家分享一些我在学习J ...
- 变色html css js
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- IF EXISTS 两个条件连用
当IF EXISTS要判断多个条件并存时,可以用AND连接,NOT EXISTS同理 IF EXISTS (SELECT 1 ) AND EXISTS (SELECT 2 ) BEGIN ...... ...
- ES6新的数据类型 generato,在AJAX中的应用
1.next()方法会执行generator的代码,然后,每次遇到yield x;就返回一个对象{value: x, done: true/false},然后“暂停”.返回的value就是yield的 ...
- 题解【loj6277】数列分块入门1
题目描述 给出一个长为\(n\)的数列,以及\(n\)个操作,操作涉及区间加法,单点查值. 输入格式 第一行输入一个数字\(n\). 第二行输入\(n\)个数字,第\(i\)个数字为\(a_{i}\) ...
- Strategic game(无向?)二分图最小点覆盖(Poj1463,Uva1292)
原题链接 此题求二分图的最小点覆盖,数值上等于该二分图的最大匹配.得知此结论可以将图染色,建有向图,然后跑匈牙利/网络流,如下.然而... #include<iostream> #incl ...
- phpstudy扩展mongoDB
观察如下3个参数,即位数,ts/nts,vc9/vc11/……三条规则(一定要一一对应) 重要是,还要对应PHP的版本,我选的是5.6的对应的版本 去http://windows.php.net/do ...