C++ using声明获得的权限简析

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值