用法一:
using namespace 命名空間;
該用法能直接在程序中使用using后所跟的命名空間的元素,而不用每次要使用時指定命名空間。
using namespace std;//這樣就可以直接用std命名空間里的元素了,如cout,string等,否則要指定命名空間,std::cout,std::string等。
用法二:
給某一類型定義別名,和typedef作用一樣。
using 類型別名=原類型;
using uint=unsigned int;
uint i=0;//相當于unsigned int;
用法三:
當一個派生類私有繼承基類時,基類的public和protected數據成員在派生類中是private的形式,如果想讓這些繼承而來的數據成員作為public或者protected成員,可以用using來重新聲明。using聲明語句中名字的訪問權限由該using聲明語句之前的訪問說明符決定。
class Basic{
public:
int a;
int b;
};
class Bulk : private Basic{
public:
using Basic::a;
protected:
using Basic::b;
};
上例中,Bulk類私有繼承Basic,默認情況下,在Bulk中,成員a,b應該是private類型,不過,在上例中用using重新聲明了a,b數據成員,使a成為public,使b成為protected。
用法四
因為派生類可以重載繼承自基類的成員函數,所以如果派生類希望所有的重載版本對于它都是可見的,那么它就要覆蓋所有版本或者一個也不覆蓋。但是,有時一個類僅需要覆蓋重載部分函數,若覆蓋所有函數,就太繁瑣了。
那么此時,using就派上用場了。只要為重載的成員函數提供一條using聲明,這樣我們就無需覆蓋基類中的每一個版本了。
class Basic{
void func(){
cout<<""func()1"<<endl;
}
void func(int a){
cout<<"func()2"<<endl;
}
};
class Bulk : public Basic{
using Basic::func;
};
上例using聲明指定一個名字而不指定形參列表,所以,一條基類成員函數的using聲明語句就可以把該函數的所有重載實例添加到派生類作用域中。