继承与重定义。对Effective C++中一个条款的疑问。
相关条款:
Effective C++ 条款37。
绝对不要重新定义继承而来的非虚拟函数。
Never redefine an inherited nonvirtual function.
问题背景:
一个BASE Class B,大概如下:
class B
{
public:
B& operator <<(float f);
B& operator >>(float& f);
B& operator <<(int i);
B& operator >>(int& i);
……
};
现在class D要从B继承,而且需要重新定义operator <<(float)和operator >>(float).
(实际工作要求就是,class D对于float的<</>>操作是将IEEE格式的float转换成IBM格式的float,然后才是class B中operator<</>>的操作,也就是说要比class B多了一步转换工作)
class D:public B
{
D& operator <<(float f);
D& operator >>(float& f);
……
……
}
问题描述:
1、B不能更改,那么按照条款37应该不能重新定义这两个operator.可是这种情况下应该怎么处理?
2、因为D重新定义了operator <<和>>,所以class B里面所有的operator <<和>>的重载函数都被覆盖(例如operator >>(int&))。
但是class D也需要处理int以及其它类型,也就是说class D里面也需要重载这些operator.class D里面对这些非float类型的处理和B里面是一样的,那么class D的这些重载函数应该怎么写?强制类型转换?__super::?B::?或是其它的方法?那种是最好的?
谢谢。