using聲明,形式如下:
using 作用域名::名字
還是先舉個例子:
class Base
{
public:
int pubi;
void pub()
{
};
};
class Derived1:public Base
{
public:
using Base::pub;
};
其中 的using Base::pub就是using聲明。
下面再來看看測試代碼:
#include "stdafx.h"
#include <iostream>
using namespace std;
class Base
{
public:
int pubi;
void pub()
{
cout << "Base public" << endl;
};
protected:
int proi;
void pro(){};
private:
int prii;
void pri(){};
};
class Derived1:public Base
{
public:
using Base::pub;
void pub(int i)
{
cout << "Derived1 public" << endl;
}
};
class Derived2:public Base
{
public:
void pub(int i)
{
cout << "Derived2 public" << endl;
}
protected:
using Base::pub;
};
class Derived3:public Base
{
public:
using Base::pro;
void pub(int i)
{
cout << "Derived1 public" << endl;
}
void test3()
{
pub();
}
private:
using Base::pub;
};
int _tmain(int argc, _TCHAR* argv[])
{
Derived1 d1;
d1.pub();
Derived2 d2;
//d2.pub();
Derived3 d3;
/*d3.pro();*/
return 0;
}
1、Derived1、Derived2和Derived3中的using Base::pub,在最後的main函數裏面可以看出using聲明分別做了以下事情:
在Derived1中讓Base的public方法保持public,由此我們可以通過Derived1的對象d1訪問Base的public pub方法。
在Derived2中讓Base的public方法變爲protected,這樣通過Derived2的對象d2無法訪問protected pub方法。
在Derived2中讓Base的private方法變爲public,彷彿能通過Derived3的對象d3訪問public pub方法,能通過編譯,但是執行時不會返回任何結果。
2、在Derived3中我們又可以看出,即便是在private中用using聲明。也可以在整個Derived3作用域中(此處爲public中的test3方法)訪問using聲明的pub方法。