大半夜闲看书,翻了几处也是巧,都看到了这个using,简单写写这个using在C plusplus中的使用。
1、引入命名空间
这个司空见惯了,写第一个程序hello world的时候,多半书籍都会给你写这么一句:
using namespace std;
引入命名空间std的意思,这样在这个引入命名空间的范围内,使用函数时就不用再标明其出处,可以理解为告诉编译器,我从哪里来,你就到这个地方找我吧。这样就不会在调用多个同名函数的时候搞错了,A和B空间下的函数是不一样的,using A就去A下找吧,别犯错误迷路了去B下找这就错了。
2、类型别名
在C++11新标准中,采用using来给类型取一个别名,这样就好记了,避免有的名字过于繁琐在用的时候还要写原名。比如:
列宁同志的原名:弗拉基米尔·伊里奇·乌里扬诺夫,你记得住???but 大家想了下,那就叫你列宁吧,这样好记啊,叫起来也方便不是。回到我们的using上来,比如有个类名为THE_FOOTBALL_TEAM_LIST,多长,你用啊,给它取个别名吧
using TFTL = THE_FOOTBALL_TEAM_LIST;
3、在子类中引入基类的成员
最常见的一个例子就是继承构造
class Base
{
public:
int _value;
Base(){}
Base(int a){_value = a; cout <<_value<<endl;}
}
public child : public Base
{
using Base::Base
}
再者一种情况:
class Base {
public:
std::size_t size() const { return n; }
protected:
std::size_t n;
};
class Child : private Base { . . . };
在上面一段代码中,基类的成员size()是个public成员,但是在子类中由于继承是private方式,所以子类的size()是private,想让它是public的,就做下面的一个小改动,加上using后,表明从基类中引入,是public的。
class Child: private Base {
public:
using Base::size;
protected:
using Base::n;
};
还有就是假如子类中有和基类同名的函数,这时还想用基类的函数,就可以使用using,不然就会隐藏基类的函数。
#include <iostream>
using namespace std;
class Base
{
public:
int printTest(){cout<<"Test function"<<endl; return 0;}
};
class Child : Base
{
public:
using Base::printfTest;//using声明只能指定一个名字,不能带形参表
int printfTest(int);
};
int main()
{
Base a; Child b;
a.printfTest();
b.printfTest();//如果去掉子类中的using声明,会报错
system("pause");
return 0;
}