最近在使用中,发现了一种以前没学过的using用法,于是在这里,将using的几种用法总结一下。
先来说说我新学会的一种用法,就是起别名,我们都知道typedef可以给我们起别名,using也可以,用法如下
1.using a = pair<int,int>,类似于这样的用法。
当然还有我们熟知的几种用法
2.可以引入命名空间
using namespace std ;
using std::cout;
在这里,我们再来说一下为什么要使用命名空间,举个例子,现在有一个学校,学校里有各种班级年级,现在校长(编译器)捡到一张身份证,需要人认领,叫张三,那么这个学校里有很多重名的人,怎么确定是哪个班的张三,找不到,校长就会疯了,这时如果知道是哪个班级,那么我们就确定了是谁,这时我们发现是二年三班的张三,那么这时就找到了,这个年级班级就是命名空间。我们引入命名空间的概念就是c++为了避免命名冲突的一种机制。
3.可以改变基类在子类中访问权限
class a
{
public:
void test(){
cout << "" << endl;
}
private:
fun(){}
};
class b::protected a
{
public:
using a::test;
};
如果我们直接继承的时候,基类中的fun为私有成员,子类没有权限去用,但是using之后就可以使用了。
还有一种使用,就是如果我们基类中和子类出现同名函数时,基类中的同名函数在使用时会被隐藏,那么我们有一种办法,就是在子类中将基类中的同名函数重写
class a
{
public:
void test(int a)
{cout << "a" << endl;}
};
class b::public a
{
public:
using a::test;
void test(){}
};
,可这样太麻烦了,于是我们用上面的方法便很容易就可以使用基类的函数,然后要注意,using 这样用的时候,后面的函数只写名字,不加形参。