设为首页 加入收藏

TOP

C++ 我想这样用(五)(二)
2015-07-20 17:53:02 来源: 作者: 【 】 浏览:3
Tags:这样
ING_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__)
40?
41 ?
42?
43 int main(int argc, char * const argv[]) {
44?
45 ? ? PRINT_STRING("Hello, World!");
46?
47 ? ? PRINT_STRING("Hello, World!", 12);
48?
49 ? ? PRINT_STRING("Hello, World!", 12, bold);
50?
51 ? ? return 0;
52?
53 }
复制代码
?
?
好吧,确实很复杂,其实可以适当简化的,不过如果你真的是想设计库,上面的完整写法真的是超赞的哦,而且可移植性很高呢,当然这不是我想出来的,原链接在这里:
?
http://stackoverflow.com/questions/3046889/optional-parameters-with-c-macros
?
?
?
4.inline函数
?
以前的C是没有inline这个东西的,对于一些要频繁使用的小函数,我们常常把他们写成宏函数,这样可以降低函数展开的开销。但是C++是有的,于是很多的编译器也为C加上了这个拓展,比如gcc,可是C99出现了,给C加上了这一特性。原本一切都好了,然而杯具的是C99的inline和许多编译器以前加的那个用法是不完全相同的,如果你习惯了gcc风格的inline,请一定要注意啊,我在网络上找到了这个,看看吧:
?
http://blog.163.com/zhaojie_ding/blog/static/172972895200811545032240
?
?
?
5.重载函数
?
现实生活中的一个词可能有多种含义,比如,洗衣服、洗头、洗车,都有一个洗字,但是他们的操作方式是不一样的。函数也一样,有时候它们的操作不完全一样但是名字一样,这就是重载函数。
?
重载函数就是,两个以上的函数取相同的函数名,但是函数形参的个数或者类型不同,编译器会根据实参与形参的类型和个数进行最佳匹配,自动确定调用哪一个函数。为什么要有重载函数呢?因为如果没有重载函数,那么对不同类型的数据进行类似的操作也要定义不同名称的函数,比如加法函数,就必须对整数加法和浮点数加法分别定义不同的函数名:
?
? ? ? int nadd(int a, int b); ? ? ?
?
  float fadd(float a, float b);
?
这样调用需要记住的函数名太多,而且功能类似,很不方便。这是C++的一个语法特性,不评论好与坏,我在C with Class是不用的。
?
?
?
6.模版函数
?
有时候我们使用重载函数还不能达到最优的效果,比如,两个求绝对值的函数:
?
int abs(int x) ? ? ? ?
?
{ ? ? ? ? ? ? ? ? ? ?
?
  return x<0 ? -x:x; ? ? ? ?
?
} ? ? ? ?
?
double abs(double x) ? ? ? ?
?
{ ? ? ? ? ? ? ? ? ??
?
  return x<0 ? -x:x; ? ? ? ?
?
}
?
大家观察下这两个函数,这两个函数只是返回值类型和参数类型不同,功能完全一样,如果能有办法写一段通用的代码适用于多种不同的数据类型,就是不用像上面那样写两个函数而只是一段代码就能实现两个函数的功能,那代码的复用性不是更高了吗?开发效率也会提高的。这就要函数模板来实现了。函数模板的定义形式是:
?
template ? ? ? ??
?
   函数定义
?
没错,模版函数已经设计到模版了,而且最重要的是,这里面已经不是OOP的思想了,而是更高层次的一种范式,即:泛型编程。显然这离C with Class太遥远。?
?
?
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Codeforces Round #261 (Div. 2) 下一篇HDU 1281 棋盘游戏(二分匹配 与 ..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: