C++中一个函数隐藏的有趣例子
2013-07-07 21:25
260 查看
函数隐藏是一个函数的定义或声明导致其他一些函数不可见。
函数A隐藏函数B的条件:
1. 两个函数具有相同的函数名称
2. 具有不同的作用域。所谓定义域函数定义或声明的位置,如全局作用域,文件作用域,类作用域等。
需要注意的是函数隐藏可以由声明来导致,不一定非要有定义造成. 后面的有趣的使用例子说明了这一点。
函数隐藏出现的一些场合
1. 全局作用域和文件作用域的隐藏
2. 全局作用域和局部作用域
3. 文件作用域和局部作用域
个人认为隐藏容易导致一些藏得很深的问题,而且不易理解和调试. 也许应该避免函数隐藏.
下面是这个例子. (该例子只是作为演示函数重载和隐藏的例子. 仅有功能而说,有理由相信,有更好的实现)
#include <iostream>
using namespace std;
#define USE_LONG
static void method(int a)
{
cout<<"in method(int)"<<endl;
}
static void method(long a)
{
cout<<"in method(long)"<<endl;
}
int main(int argc, char *argv[])
{
#ifdef USE_INT
void method(int);
#endif // USE_INT
#ifdef USE_LONG
void method(long);
#endif // USE_LONG
method(10);
return 0;
}
当定义宏 USE_INT时,执行结果为: in method(int);
当定义宏 USE_LONG时,执行结果为:in method(long);
该例子中,如果定义USE_INT, 则在main函数体内声明 void method(int). 如果声明USE_LONG, 则在main函数体内声明void method(long).
函数体内声明后,该函数就具有了局部作用域,此时将会覆盖另外一个函数。
如果同时定义USE_INT和USE_LONG, 猜一下会是什么结果那?
答案是in method(int);
原因在于此时两个函数都具有了局部作用域,形成了函数重载。
另外,如果对JavaScript的函数调用链有一定了解。那函数隐藏就是个小菜了。
函数A隐藏函数B的条件:
1. 两个函数具有相同的函数名称
2. 具有不同的作用域。所谓定义域函数定义或声明的位置,如全局作用域,文件作用域,类作用域等。
需要注意的是函数隐藏可以由声明来导致,不一定非要有定义造成. 后面的有趣的使用例子说明了这一点。
函数隐藏出现的一些场合
1. 全局作用域和文件作用域的隐藏
2. 全局作用域和局部作用域
3. 文件作用域和局部作用域
个人认为隐藏容易导致一些藏得很深的问题,而且不易理解和调试. 也许应该避免函数隐藏.
下面是这个例子. (该例子只是作为演示函数重载和隐藏的例子. 仅有功能而说,有理由相信,有更好的实现)
#include <iostream>
using namespace std;
#define USE_LONG
static void method(int a)
{
cout<<"in method(int)"<<endl;
}
static void method(long a)
{
cout<<"in method(long)"<<endl;
}
int main(int argc, char *argv[])
{
#ifdef USE_INT
void method(int);
#endif // USE_INT
#ifdef USE_LONG
void method(long);
#endif // USE_LONG
method(10);
return 0;
}
当定义宏 USE_INT时,执行结果为: in method(int);
当定义宏 USE_LONG时,执行结果为:in method(long);
该例子中,如果定义USE_INT, 则在main函数体内声明 void method(int). 如果声明USE_LONG, 则在main函数体内声明void method(long).
函数体内声明后,该函数就具有了局部作用域,此时将会覆盖另外一个函数。
如果同时定义USE_INT和USE_LONG, 猜一下会是什么结果那?
答案是in method(int);
原因在于此时两个函数都具有了局部作用域,形成了函数重载。
另外,如果对JavaScript的函数调用链有一定了解。那函数隐藏就是个小菜了。
相关文章推荐
- C++中一个函数隐藏的有趣例子
- 【C++学习笔记】 C++与JAVA的异同,一个有趣的例子
- 关于封装--一个有趣的C++例子
- 一个虚函数隐藏和重写的例子(new和override)
- C++ 一个例子说明.c_str()函数
- 【c++总结-类】一个例子知道类的创建,对象,函数实现,构造函数,析构函数
- C++构造 函数,析构函数,拷贝构造函数,赋值构造函数,一个内存错误例子!
- C++ 函数指针 一个例子说明一下ing
- 一个C++程序例子——指向函数的指针、含有可变形参的函数(备查)
- C++的四种强制类型转换和一个有趣的例子
- 自己写一个strcmp函数(C++)
- 一个函数的例子
- C++调用一个成员函数的需求this指针的情况
- C++ 利用函数, 制作一个三角函数表
- 一个利用友元函数结合C和C++的简单例子
- Android中点击空白区域控件自动隐藏(事件传递机制中的一个小例子)
- C++成员函数的隐藏、覆盖和重载。
- C++中一个空类含有哪些默认的成员函数
- C++中成员函数的重载、覆盖与隐藏
- 每日一个C++小程序(十二)--具有静态数据、函数成员的Point类,多文件组织