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方法。