何为宠妃ooc和ooc的危害

让我展示一下什么叫ooc|LOFTER(乐乎)
LOFTER for ipad —— 记录生活,发现同好
{list photos as photo}
{if photo_index==0}{break}{/if}
品牌${make||'-'}
型号${model||'-'}
焦距${focalLength||'-'}
光圈${apertureValue||'-'}
快门速度${exposureTime||'-'}
ISO${isoSpeedRatings||'-'}
曝光补偿${exposureBiasValue||'-'}
镜头${lens||'-'}
{if defined('posts')&&posts.length>0}
{list posts as post}
{if post_index < 3}
{if post.type == 1 || post.type == 5}
{if !!post.title}${post.title|escape}{/if}
{if !!post.digest}${post.digest}{/if}
{if post.type == 2}
{if post.type == 3}
{if post.type == 4}
{if data.msgRank == 1}{/if}
{if data.askSetting == 1}{/if}
{if defined('posts')&&posts.length>0}
{list posts as post}
{if post.type == 2}
{if post.type == 3}
{if post.type == 4}
this.p={ currentPage:1,pageNewMode:true,isgooglead3:false,ishotrecompost:false,visitorId:0, first:'',tag:'让我展示一下什么叫ooc',recommType:'new',recommenderRole:0,offset:1,type:0,isUserEditor:0};&OOC-GCC 概述&下载地址&其实这还是我对用C语言进行OO方式编程的一些尝试,最早的时候我在SF建了一个叫JCOOP的项目,后来搬到GOOGLE CODE&不过随着不断的改进,也对OO有了进一步的理解,&在这里先谈一下现在我对OO的理解,&所谓OO,本质是对象驱动型编程模式,其核心在于抽象,并将代码封装使之更易于复用.&所以说你用结构体来抽象描述某种事物并不意味着你的代码就不是OO的,所以说用C也是可以写出OO的代码的.&有人或许会更仔细的区分OO和OB,认为只有支持了多态,RTTI这些儿玩意儿的才是OO,其它的只能是OB&[&#8251;O&#8594;oriented,B&#8594;based]&我不想去争论这些没有太大意义的概念,因为C语言本身不是OO的语言.&不过话说回来,计算机的执行过程在逻辑上都本质是过程化的,因为汇编是过程的,机器码也是过程的.&而那些OO的语言只不过是编译器帮助完成了一些迷惑性的工作,帮你完成了内存分布,访问控制等的跑龙套的活而已.&无论何种类型的语言,执行过程都会遵循一定的顺序,所以说像C这类语言骨子里并不输给CPP,JAVA,&反倒是一些很高级的语言,引入了过多的语法糖,深入学习后总会感到有些瑕疵.&下面言归正传,&用C去模拟OO[这里说的OO包括OB和OO,是指一种思想,从对象入手的编程方式],首先要模拟的就是其最核心的东西.&虽然Ruby,CPP的技巧繁多,但依我现在来看,OO最重要的东西不是多态这些,而是如何去设计一个类,以及如何区别其他类.&本质上来说就是类的结构设计,类的构造与析构,如何调用类的成员.&对于用C模拟OO来说,类结构自然就是struct,普通成员依旧是普通成员,方法就是函数指针.至于虚函数与否,就是指向的问题了.&在目前的OOC-GCC中,通过宏class...eclass来定义一个类,通过ctor...ector和dtor...edtor宏来完成构造和析构.而调用的时候则要用到new...del宏以及ini...fin宏,如果类在堆上,使用new...del,如果类在栈上,使用ini...fin.&至于继承的问题,用struct当然是struct中套struct了,而类型系统以及类型的转换,额外动手写是必须的,不过一种比较好的思路是&用union来包含不同的类型,并以一个变量来区分不同的类型,目前还没有弄这一块,因为个人觉得这样做太冗杂了.&OO本来就是简化编程的,弄得复杂了就不好了.&在最近的尝试中,还试着来模拟foreach这样的行为,但是目前的实现需要他typeof这种类别的关键字的支持[或者__typeof__类似的]&下面举一个Iterator的例子,当然这个Iterator和别的语言的必须是有所不同的.&假定我们要构造一个描述集合的类B,一个描述元素的类N.&要使用我这里的Iterator,只需让B包含一个IterationBase[或用typedef后的IBase],让N包含一个IterationNode[INode]&具体的类,以及构造与析构如下&//类声明&class(B)
IBase ibase;
eclass&//构造&ctor(B)
ini0(IterationBase,&this-&ibase);
ector&//析构&dtor(B)
edtor&////////////////////类声明&class(N)
INode inode;
//这里v用来保存实际测试用的数据
eclass&//构造&ctor(N)
ini0(IterationNode,&(this-&inode));
this-&v=(int)param;
ector&析构&dtor(N)
edtor&&下面给出测试用的main函数&int main (int argc, char *argv[])
//声明部分
Iterator itor;
ini0(Iterator,&itor);
N *n1=NULL,*n2=NULL,*n3=NULL,*n4=NULL;
n1=new(N,(void *)111);
n2=new(N,(void *)112);
n3=new(N,(void *)113);
n4=new(N,(void *)114);
b=new0(B);
//将n1..n4绑定到b,
//注意append前两个是不需要next的
//第一次插入无论用append或prepend
//都会使base中的指针指向插入的node
itor.append(&b-&ibase,&n1-&inode);
//以后每次的append或prepend都是针对
//当前base中的cur指针的
itor.append(&b-&ibase,&n2-&inode);
//这里想要在整个base的尾部插入
//所以后面的每次插入都需要next一下
itor.next(&b-&ibase);
itor.append(&b-&ibase,&n3-&inode);
itor.next(&b-&ibase);
itor.append(&b-&ibase,&n4-&inode);
//foreach遍历
N *np=NULL;
//哈哈 foreach 遍历 !
foreach(np,b)
printf("--%d",np-&v);
printf("\n");
//反着再遍历一遍 !
foreach_rev(np,b)
printf("--%d",np-&v);
//释放堆内存
del0(N,&n1);
del0(N,&n2);
del0(N,&n3);
del0(N,&n4);
del0(B,&b);
return(0);
}&&正确的输出是&--111--112--113--114
--114--113--112--111&[&#8251;最后注明一下,OOC-GCC从名字上就能看出是针对GCC的,用C++的编译器肯定无法编译的如果是其他纯C的编译器[最好支持C99扩展的],可能需要稍微修改一些,但量不会很大]&&
阅读(...) 评论()

我要回帖

更多关于 何为书阅读答案 的文章

 

随机推荐