jni调用C和C++

已经在工作中碰到了两个这样的例子了,项目用java,但需要调用C/C++的库。之前一个是用java写hadoop的job,但是调用的算法是用C++实现的,使用的是jni。现在好像jni在android上面也有用到,但是我不了解。我自己也不懂java,但实际工作中有的时候也要看看java代码。所以决定写一个简单的jni例子,了解一下jni怎么完成C/C++调用的。

Read More

虚继承

C++里面的virtual关键字可以用虚函数声明,也可以用于虚继承。上一篇博客讲到了《虚函数》,这篇博客就讲虚继承。

首先来看为什么需要虚继承。C++里面继承关系中有个很有名的继承结构,菱形继承,如下图所示

普通继承,派生类包含了基类所有的非static成员。如果采用普通继承,在上图的iostream类中,实际上会存在两个ios基类。这样会带来很多问题,首先最简单的是空间浪费,iostream类中存在两个相同的ios类,然后是构造效率低,需要构造两个ios类。更严重的是调用基类中的函数时,存在二义性,当iostream调用ios的成员函数时,编译器无法知道是调用istream还是ostream中的ios。

C++的解决方案就是虚拟继承(Virtual Inheritance)。虚拟继承可以说成虚继承,在本文中,这两个词是等价的。 在虚拟继承下,只有一个共享的基类子对象被继承,而无论该基类在派生层次中出现多少次。共享的基类子对象被称为虚拟基类(virtual base class)。在虚拟继承下,基类子对象的复制及由此而引起的二义性都被消除了。

Read More

虚函数

面试的时候,常常宣称自己是一个C++程序员,不免就会被问一些有关C++的问题,例如虚函数的实现原理;析构函数是否能定义为虚函数等等。很多时候都回答不上来,就总会以时间久了忘了,搪塞过去,面试完,可能回去查查答案,但也总是不求甚解。

既然有了博客,我就准备看看这些方面的内容,希望能记录下来,有所积累。于是就到网上查,或在书上找找,后来发现里面的内容太多了,不是一篇两篇博客就能写完的。于是没有办法,就只有硬着头皮写一个系列了。今天是第一部分虚函数和虚继承。

C++的关键字virtual只能用在两个地方,一是定义类的成员函数为虚函数,二是定义类的继承关系为虚继承。这两点的用处大相径庭,但是在设计思想上还是有一定的共同性的。这篇文章先讲虚函数,下一篇讲虚继承。

Read More

读Vim手册笔记

书籍

《VIM用户手册》  
作者: Bram Moolenaar  
翻译: ZhaoRuFei<slimzhao@hotmail.com>  
版本: 7.0  

{: .sh-bash}

笔记

  1. 要退出Vim, 用命令“ZZ”. 该命令保存当前文件并退出Vim.
  2. 如果你在放弃所有修改后还想以该文件的初始内容作为开始继续编辑, 还可以用“:e!”命令放弃所有修改并重新载入该文件的原始内容.

奇技淫巧

  1. d^ 删除光标到行首第一个非空白字符之间的内容,可用于删除行首的空白
  2. gu/gU 大小写转化,gu小写,gU转为大写.
    u/U: 选中区域,直接进行大小写转换 gg gu G:整篇文章大写转化为小写。
    gU0 :从光标所在位置到行首变为大写
    gU$ :从光标所在位置到行尾变为大写
  3. vundle 管理vim插件
  4. vim查看编译错误 :make 进行编译,需要在makefile所在的目录下打开文件 :cw 带开quickfix窗口 cn (next)下一条 cp (previous) 上一条 cw (显示warning) cc 显示错误 col 前一个旧的错误 勘误表 col 后一个旧的勘误表 cnew 后一个较新的错误列表 ( :help :cnew )

显示公式

在网页或blog中引用数学公式是一件痛苦的事情。经过几番在网上的查找,算是勉强找到了一个借鉴方法。借用强大的MathJax + Latex就可以解决这个问题。废话少说,先来一个例子

\[ \begin{aligned} & \phi(x,y) = \phi \left(\sum_{i=1}^n x_ie_i, \sum_{j=1}^n y_je_j \right) = \sum_{i=1}^n \sum_{j=1}^n x_i y_j \phi(e_i, e_j) = \\ & (x_1, \ldots, x_n) \left( \begin{array}{ccc} \phi(e_1, e_1) & \cdots & \phi(e_1, e_n) \\ \vdots & \ddots & \vdots \\ \phi(e_n, e_1) & \cdots & \phi(e_n, e_n) \end{array} \right) \left( \begin{array}{c} y_1 \\ \vdots \\ y_n \end{array} \right) \end{aligned} \]

Read More

第一篇

桃花庵歌

——唐伯虎

桃花坞里桃花庵,桃花庵下桃花仙。桃花仙人种桃树,又摘桃花换酒钱。
酒醒只在花前坐,酒醉还来花下眠。半醉半醒日复日,花落花开年复年。
但愿老死花酒间,不愿鞠躬车马前。车尘马足显者事,酒盏花枝隐士缘。
若将显者比隐士,一在平地一在天。若将花酒比车马,彼何碌碌我何闲。
别人笑我太疯癫,我笑他人看不穿。不见五陵豪杰墓,无花无酒锄作田。

Read More