OO的bug,C++的bug,还是编译器的bug?
2008-04-04 16:57
405 查看
OO的bug,C++的bug,还是编译器的bug?按照面向对象的理论派生类可以直接继承基类的公有方法.例如:[align=left] class base[/align][align=left] {[/align][align=left] public:[/align][align=left] void fun(const int& arg)[/align][align=left] {[/align][align=left] }[/align][align=left] };[/align][align=left] [/align][align=left] class derive: public base[/align][align=left] {[/align] };现在类derive就自然而然的有了一个void fun(const int& arg)的方法.这个方法就是从类base继承而来的.然而这一却在引入模板后就变的混挑乱不堪了.请看下面这两个类.[align=left] class base[/align][align=left] {[/align][align=left] public:[/align][align=left] template[/align][align=left] void fun(const int& arg)[/align][align=left] {[/align][align=left] }[/align][align=left] };[/align][align=left] [/align][align=left] class derive: public base[/align][align=left] {[/align] };[align=left]这次类base有一个成员模板函数templatevoid fun(const int& arg),按照OO的理论,类derive也自然有这个成员模板函数.那么好吧.我们就来特化类derive的这个成员模板函数.于是我们写下了一个这样的特化:[/align][align=left] template<>[/align][align=left] void derive::fun< int > (const int& arg)[/align][align=left] {[/align][align=left] }[/align][align=left]然而这个特化却不能被编译器支持.在G++中会有编译错误,说”derive中没有函数fun”.类derive不是从类base中继承了函数fun了吗?[/align][align=left]在vc中倒是能编译通过,但却会有一个非常奇怪的运行结果.为了看到个结果我们来让类base的fun函数输出它的函数名,同时我们也让特化后的类derive的fun也输出函数名.改完后的代码如下:[/align][align=left] class base[/align][align=left] {[/align][align=left] public:[/align][align=left] template[/align][align=left] void fun(const T& arg)[/align][align=left] {[/align][align=left] cout << "/t" << __FUNCTION__ << endl;[/align][align=left] }[/align][align=left] };[/align][align=left] [/align][align=left] class derive: public base[/align][align=left] {[/align][align=left] };[/align][align=left] [/align][align=left] template<>[/align][align=left] void derive::fun< int > (const int& arg)[/align][align=left] {[/align][align=left] cout << "/t" << __FUNCTION__ << endl;[/align][align=left] }[/align][align=left]下面我们来测试这些代码. 测试如下:[/align][align=left] derive obj;[/align][align=left] obj.fun(8);[/align][align=left] obj.fun(8.8);[/align][align=left]输出结果有点出人意料.这个测试的输出如下:[/align][align=left]base::fun[/align][align=left]base::fun[/align][align=left]竟然两个fun:特化的和非特化的都是类base的. 我们明明是特化的类derive的fun呀.[/align]
相关文章推荐
- OO的bug,C++的bug,还是编译器的bug?
- OO的bug,C++的bug,还是编译器的bug?
- OO的bug,C++的bug,还是编译器的bug?
- OO的bug,C++的bug,还是编译器的bug?
- OO的bug,C++的bug,还是编译器的bug?
- OO的bug,C++的bug,还是编译器的bug?
- OO的bug,C++的bug,还是编译器的bug?
- OO的bug,C++的bug,还是编译器的bug?
- 判断当前编译器是C++编译还是C编译
- C++ 转义符号 字符串很危险? 还是 vs2008 的 bug
- 在 console mode 中使用 C/C++ 编译器
- c++ 直接插入排序算法---数组引用调用,正序,倒序循环,for终止条件还是for可以条件
- 《纠结学习C++还是Java》之《如何学好java》
- 微软C/C++ 编译器选项
- Pydot的Bug,到底使用Pyparsing1还是2的纠结
- vs2005 c++ heap使用push_head()异常invalid heap(bug)
- 关于C++中的rand()的很蠢的bug
- C++基本概念在编译器中的实现
- C++各平台和编译器的预编译宏定义
- Objective-C/C++混编编译器设置