c语言来实现c++
闲来没事,看了看sqlite的源代码,突然想用c实现c++,写了例如以下demo,自我感觉不错
#include <stdio.h>
#include <stdlib.h> struct Class;
typedef struct Class _Class; struct IMethod
{
void (*ctor)(_Class *c);
void (*dtor)(_Class *c);
int (*sum)(_Class* c);
int (*getValueA)(_Class* c);
int (*getValueB)(_Class* c);
void (*setValueA)(_Class*c, int a);
void (*setValueB)(_Class *c, int b);
};
typedef struct IMethod _IMethod; typedef struct Class
{
//数据
int m_a;
int m_b; //接口
_IMethod m_method;
} _Class; int _sum(_Class *c)
{
return c->m_a+c->m_b;
} int _getValueA(_Class *c)
{
return c->m_a;
} int _getValueB(_Class *c)
{
return c->m_b;
} void _setValueA(_Class *c, int a)
{
c->m_a = a;
} void _setValueB(_Class *c, int b)
{
c->m_b = b;
} void _ctor(_Class *c)
{
printf("create new _Class\n"); //初始化数据,构造函数
c->m_method.sum = &_sum;
c->m_method.getValueA = &_getValueA;
c->m_method.getValueB = &_getValueB;
c->m_method.setValueA = &_setValueA;
c->m_method.setValueB = &_setValueB; c->m_a = 0;
c->m_b = 0;
} void _dtor(_Class *c)
{
printf("delete _Class\n"); //析构函数
} //_Class的对象工厂
_Class *newClass()
{
_Class* obj= (_Class*)malloc(sizeof(_Class));
_ctor(obj);
return obj;
} void deleteClass(_Class * c)
{
_dtor(c);
free(c);
} #define CXX_CALLER(obj, fun,...)\
obj->m_method.fun(obj, __VA_ARGS__);\ int main(int argc, char *argv[])
{
_Class *c = newClass(); int a=0, b=0, sum=0;
CXX_CALLER(c, setValueA, 100);
CXX_CALLER(c, setValueB, 200);
// c->m_method.setValueA(100);
// c->m_method.setValueB(200); // a = c->m_method.getValueA(c);
// b = c->m_method.getValueB(c);
// sum = c->m_method.sum(c);
a = CXX_CALLER(c, getValueA);
b = CXX_CALLER(c, getValueB);
sum = CXX_CALLER(c, sum); printf("a=%d, b=%d, sum=%d\n", a, b, sum); deleteClass(c); getchar();
return 0;
}
c语言来实现c++的更多相关文章
- C语言 · 高精度加法
问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ...
- Windows server 2012 添加中文语言包(英文转为中文)(离线)
Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...
- iOS开发系列--Swift语言
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
- C语言 · Anagrams问题
问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ...
- C语言 · 字符转对比
问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等.比如 Beijing 和 Hebei 2:两个字符串不仅长度相 ...
- JAVA语言中的修饰符
JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...
- Atitit 项目语言的选择 java c#.net php??
Atitit 项目语言的选择 java c#.net php?? 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势1 1.2. 从个人职业生涯考虑,java优先1 1.3. 从项目实际来 ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- InstallShield 脚本语言学习笔记
InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加. 一.基本语法规则 ...
- 用C语言封装OC对象(耐心阅读,非常重要)
用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...
随机推荐
- Kendo UI开发教程(23): 单页面应用(一)概述
Kendo单页面应用(Single-Page Application,缩写为SPA)定义了一组类用于简化Web应用(Rich Client)开发,最常见的单页面应用为Gmail应用,使用单页面可以给用 ...
- ZOJ 1542 POJ 1861 Network 网络 最小生成树,求最长边,Kruskal算法
题目连接:problemId=542" target="_blank">ZOJ 1542 POJ 1861 Network 网络 Network Time Limi ...
- Servlet的学习之Session(2)
在上一篇中我们学习了Session对象默认在一个会话过程中,由服务器创建,能保存在这个会话过程中用户访问多个web资源时产生的需要保存的数据,并在访问服务器中其他web资源时可以将这些数据从Sessi ...
- [置顶] Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作
SQLite 是一个轻量级的免费关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的内存就够了,可以在(http://www.sqlite.org ...
- jquery控制动态生成的gridview中多列checkbox的全选反选及自动判断是否全选状态
动态生成的Gridview的前台html代码如下: <table class="usertableborder" cellspacing="0" ...
- CListCtrl插入数据避免闪烁
1.锁定窗口,不进行刷新 m_list.LockWindowUpdate(); 2.设定列表不进行重画 m_list.SetRedraw(FALSE); 3.清空列表,删除历史数据 m_list.De ...
- Swift - whose view is not in the window hierarchy 问题解决方法
问题现象:想在页面初始化的时候,使用self.presentViewController方法弹出个告警提示框UIAlertController.但行后报了个如下告警,同时告警框也出不来. 1 2015 ...
- 华为OJ培训主题 比赛统计
题目例如以下: 比赛情况统计 有一个游戏平台,各个參赛队伍(以唯一的TeamID来标识)之间进行单循环的对抗赛,两个队伍之间仅仅举行一场比赛,比赛以得分的多少定胜负.须要完毕一个统计赛况的程序,可以随 ...
- 四个机器学习一步一步入门约束波尔兹曼机RBM
- 如何获取本地html文件的标题
本文用于提取本地网页的标签元素如<TITLE></TITLE>,<IMG>,<A></A>...的内容,非常实用于批量文件的操作,这是按一般 ...