C语言中的面向对象(4)-面向对象思想
最近很多朋友喜欢上设计,但是大家却不知道如何去做,别担心有图老师给你解答,史上最全最棒的详细解说让你一看就懂。
有的人不禁要问,宏定义怎么扯到这里来了,我们可以先看一个简单的例子:
#define MacroFunction Afunction
然后在程序里面你调用了大量的AFunction,但是有一天,你忽然发现你要用BFunction了,(不过AFunction又不能不要,很有可能你以后还要调用),这个时候,你就可以#define MacroFunction Bfunction来达到这样的目的。
当然,不得不说这样的办法是too simple,sometime naïve的,因为一个很滑稽的问题是假如我一般要改为BFunction,一半不变怎么办? 那就只好查找替换了。 2.静态的入口函数,保证函数名相同,利用标志位调用子函数:
这样的典型应用很多,比如说网卡驱动里面有一个入口函数Nilan(int FunctionCode,Para*)。具体的参数是什么记不清楚了。不过NiLan的主体是这样的:
Long Nilan(int FunctionCode,Para*){
Switch(FunctionCode){
Case SendPacket:
send(….)
Case ReceivePacket:
receive(…)
…
} 写到这里大家明白什么意思了吧。保证相同的函数名就是说:网卡驱动是和pNA+协议栈互连的,那么如何保证pNA+协议栈和不同的驱动都兼容呢,一个简单的办法就是仅仅使用一个入口函数。通过改变假如函数的参数值,来调用内部的各个函数。这样的做法是可以进化的:假如以后想调用新的函数,增加相应的函数参数值就好了。假如我们将网卡驱动和pNA+协议栈看作两个层的话,我们可以发现: 层与层之间的互连接口是很小的(这里是一个入口函数),一般是采用名字解析的办法而不是具体的函数调用(利用FunctionCode调用函数,Nilan仅仅实现名字解析的功能)――!接口限制和名字解析 接口限制:层与层之间仅仅知道有限的函数 名字解析:层与层之间建立共同的名字与函数的对应关系,之间利用名字调用功能。 更多内容请看C/C++进阶技术文档专题,或