using在c++中有两个用法:
一、使用名字空间。二、使用名字空间的名字。
一使用名字空间
大家都知道,一般常见的
using namespace std;
完了。
二、使用名字空间的名字。
像
using std::cin;
using std::vector;
就是。
而我想写的是在继承里面using的用处。我知道的有两个,如下:
1)去除个别成员
如果进行private或者protected继承,则基类的访问级别在派生类中更加受限。我们可以使用using恢复继承成员的访问级别。
class Base{
public:
std::size_t get_size(){ return n;}
protected:
std::size_t n;
};
class Derived:private Base{
public:
using Base::get_size;//在Derived的public部分增加一个using声明,就可以使get_size本类的public成员。
protected:
using Base::n;//此时n为protected成员。
};
2)重载基类函数
如果派生类想重载基类的函数,要么重定义所有版本,要么一个也不定义。这个是因为派生类定义的函数会覆盖基类的名字。但是我们很多时候只是想重定义其中某些
函数,那么这个规则无疑令人厌烦。
使用 using 就可以解决这个问题。
class Base{
public:
void test();
void test(int );
void test(double);
};
class Derived:public:Base{
public:
using Base::test;
void test(int ,double );
};
int main()
{
Derived d;
d.test()
d.test(1);
d.test(1,1.2);
return 0;
}
这样就可以成功重载基类的函数。如果去掉using那一行,则程序将在编译时报错:找不到test(),test(int)的版本。