闲来没事,看了看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++的更多相关文章

  1. C语言 · 高精度加法

    问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ...

  2. Windows server 2012 添加中文语言包(英文转为中文)(离线)

    Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...

  3. iOS开发系列--Swift语言

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

  4. C语言 · Anagrams问题

    问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ...

  5. C语言 · 字符转对比

    问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等.比如 Beijing 和 Hebei 2:两个字符串不仅长度相 ...

  6. JAVA语言中的修饰符

    JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...

  7. Atitit 项目语言的选择 java c#.net  php??

    Atitit 项目语言的选择 java c#.net  php?? 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势1 1.2. 从个人职业生涯考虑,java优先1 1.3. 从项目实际来 ...

  8. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  9. InstallShield 脚本语言学习笔记

    InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加.     一.基本语法规则      ...

  10. 用C语言封装OC对象(耐心阅读,非常重要)

    用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...

随机推荐

  1. PO经批准的订单API

    DECLARE l_return_status VARCHAR2(1); l_exception_msg VARCHAR2(4000); BEGIN mo_global.set_policy_cont ...

  2. Android开发:在onTouchEvent中处理任意时间的长按事件

    Android提供了GestureDetector类来处理一些常用的手势操作,比如说 onLongPress,onFling 等.但这里不使用GestureDetector,而是直接在自定义View重 ...

  3. 微软推荐的130道ASP.NET常见面试题及答案

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成 ...

  4. C++学习之路—继承与派生(三):多重继承与虚基类

    (根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 多重继承是指一个派生类有两个或多个基类.例如,有 ...

  5. CMDeviceMotion使用

    CMDeviceMotion使用 by 吴雪莹 manager = [[CMMotionManager alloc] init]; ViewController *__weak weakSelf=se ...

  6. Spring Security Source Code -- 验证标准流程

    除了初始阶段: 主干验证流程链: MyInvocationSecurityMetadataSource.getAttributes(Object) line: 43     MyFilterSecur ...

  7. Swift - 带结果列表的搜索条(UISearchDisplayController)的用法

    (注:自iOS8起,苹果便废弃UISearchDisplayController的使用,改为使用UISearchController来实现类似功能,可参考我的另一篇文章“Swift - 使用UISea ...

  8. Swift - 文件,文件夹操作大全

    ios开发经常会遇到读文件,写文件等,对文件和文件夹的操作,这时就可以使用NSFileManager,NSFileHandle等类来实现. 下面总结了各种常用的操作: 1,遍历一个目录下的所有文件 1 ...

  9. Windows系统版本号判定那些事儿

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  10. DELPHI学习---类和对象(五篇)

    Classes and objects(类和对象) 类(或者类类型)定义了一个结构,它包括字段(也称为域).方法和属性:类的实例叫做对象:类的字段.方法和属性被称为它的部件(components)或成 ...