OO的bug,C++的bug,还是编译器的bug?
来源:互联网 发布:多文件编程结构体 编辑:程序博客网 时间:2024/04/28 01:02
OO的bug,C++的bug,还是编译器的bug?
按照面向对象的理论派生类可以直接继承基类的公有方法.例如:
class base
{
public:
void fun(const int& arg)
{
}
};
class derive: public base
{
};
现在类derive就自然而然的有了一个void fun(const int& arg)的方法.这个方法就是从类base继承而来的.然而这一却在引入模板后就变的混挑乱不堪了.请看下面这两个类.
class base
{
public:
template<class T>
void fun(const int& arg)
{
}
};
class derive: public base
{
};
这次类base有一个成员模板函数template<class T>void fun(const int& arg),按照OO的理论,类derive也自然有这个成员模板函数.那么好吧.我们就来特化类derive的这个成员模板函数.于是我们写下了一个这样的特化:
template<>
void derive::fun< int > (const int& arg)
{
}
然而这个特化却不能被编译器支持.在G++中会有编译错误,说”derive中没有函数fun”.类derive不是从类base中继承了函数fun了吗?
在vc中倒是能编译通过,但却会有一个非常奇怪的运行结果.为了看到个结果我们来让类base的fun函数输出它的函数名,同时我们也让特化后的类derive的fun也输出函数名.改完后的代码如下:
class base
{
public:
template<class T>
void fun(const T& arg)
{
cout << "/t" << __FUNCTION__ << endl;
}
};
class derive: public base
{
};
template<>
void derive::fun< int > (const int& arg)
{
cout << "/t" << __FUNCTION__ << endl;
}
下面我们来测试这些代码. 测试如下:
derive obj;
obj.fun(8);
obj.fun(8.8);
输出结果有点出人意料.这个测试的输出如下:
base::fun
base::fun
竟然两个fun:特化的和非特化的都是类base的. 我们明明是特化的类derive的fun呀.
- 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#编译器的bug
- VC6编译器的BUG
- vc编译器的一个bug
- eclipse 编译器的一个bug
- CodeSourcery G++编译器的BUG
- 不是bug的bug?
- TortoiseSVN还是有Bug的
- 关于《C语言深度剖析》之编译器的bug问题
- 《C语言深度解剖》4.15编译器的bug一节详解
- vc编译器的讨厌的bug
- PSM过程的9条软件度量准则
- 我的MSDN Blog正式开张,欢迎大家访问 [ http://blogs.msdn.com/yizhang/ ]
- 【程序思考】用 Rails 实现“乐道”构想
- 用C写有面向对象特点的程序
- 和SEG Leader的对话(20070907)
- OO的bug,C++的bug,还是编译器的bug?
- Linux下将CD音乐提取为mp3的方法和中文乱码问题的解决
- 让后门能够偏特化
- Ubuntu7.04使用totem-xine,安装libxine1-ffmpeg后,rm文件播放无声问题的解决办法
- 【程序思考】简单就是力量
- 巧用成员模板函数为你的类留下后门
- ACM UVa算法题209 Triangular Vertices的解法
- 中国Debian、Ubuntu安装包服务器地址
- 让自定义的类型可以和任意的类型之间转换