`using`关键字用于基类的默认行为

时间:2013-11-25 19:29:19

标签: c++ overloading using derived-class

当我需要using关键字时,我真的不明白。当你想使用基类中的函数或对象时,你总是需要它吗?我发现即使我没有超载功能,我也必须使用它。

3 个答案:

答案 0 :(得分:2)

只有两种情况需要在课堂上使用using。首先,当您在类中定义一个与基类中的函数同名的函数时,您希望使用重载并考虑它们。另一种是当你想使用基类构造函数作为派生构造函数时。

答案 1 :(得分:2)

当您在派生类中重载相应名称时,您只需要基类成员的using - 指令,以使基类重载可见。如果不在detived类中重载名称,则根本不需要using - 指令。

背景是,如果对基类的更改会劫持函数重载,则会被认为是令人惊讶的。因此,默认情况下会隐藏基类的重载。如果您希望使用它们,那么您正在进行一次彻底的改变。

让我们假设规则没有到位并考虑定义成员f(double)的派生类,它被称为object.f(0)。如果更改基类以提供f(int)并且重载是可见的,则新函数将更好地匹配。也就是说,在行为无声地改变之前不可见。这可能是一个坏主意。

答案 2 :(得分:0)

如果处理命名空间,则必须使用它。例如:

using namespace std;
using std::cout;
using std::endl;
// without that you have to type it in following way
std::cout << std::endl;
// which is not the best way if you use it very often,
// but good if you want to use some names in your code

这允许您使用一些具有命名空间的库。它是为封装(隐藏)变量,类和方法创建的,否则需要更多名称空间并禁止在项目中使用某些名称。