using 的使用分为using指示与using声明。
避免在头文件使用using,最多也只能在函数或命名空间中使用。
1、using 声明
有效范围:从声明处至所在作用域结束。
using声明可以控制哪些名字是可见的。这种使用非常广泛:
如:
①在函数中,或在cpp文件中使用using std::cin;
②在派生类中使用using使基类成员可见。这种用法一般用在 私有继承 和 成员隐藏。
class Base
{
public:
int a
}
class D : private Base
{
}
此时D中的a是private属性,如果我们想把它转成public属性,则需要使用如下代码
public:
using Base::a;
再看下面的代码
class base
{
public:
void func() {}
}
class d : public base
{
public:
// 注意!!!与上面那个函数不一样!!!
func(int) {}
}
int main()
{
base b;
d;
b.func();
d.func(); // 错误!!!!!成员隐藏
}
在派生类D中,是看不到func()无参函数的,因为它被有参函数func(int)隐藏了!如果要解决这个问题,可以用using声明。
public:
using base::func; // using 声明只能带一个名字,不能带参数。
using声明语句可以出现在全局作用域,局部作用域,命名空间作用域,以及类作用域。
2、using 指示。其实就是using namesapce name;
无法控制部分名字可见,因为所有名字都是可见的。
using指示可以出现在全局作用域,局部作用域,命名空间作用域,但不能出现在类作用域。