当心虚函数重载(overloaded-virtual)
(转载请注明来源于金庆的专栏)
为网游万王之王3(KOK3)服务器添加新功能的时候,
发现某个类成员函数应该是const函数, 因为我的const函数要调用该函数,
顺手就加上了const.
再顺便看到该类有好多个明显是getter函数, 所以都加上了const.
编译没错就提交了.
结果没多久测试就发现了新版本的一个错误, 表现在其他功能上,
但由同事纠错后发现是我添加const的后果.
原来添加const的成员函数中, 有一个是virtual函数, 加了const后与子类的函数原型就不符了.
子类的函数成为父类虚函数的一个重载, 使virtual失效, 多态性无法表现出来.
解决方法就是子类的相应虚函数中也添加const.
教训: 更改虚函数原型时, 必须同时更改父类和子类.
gcc中有个-Wove阅读全文>
发表于 @ 2009年05月22日 14:00:00|评论(loading...)|举报|收藏