C++ 在派生类中使用using声明改变基类成员的可访问性

Posted Wecccccccc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 在派生类中使用using声明改变基类成员的可访问性相关的知识,希望对你有一定的参考价值。

通过在类的内部使用using声明语句 , 我们可以将该类的直接或间接基类中的任何可访问成员标记出来 (只限于非私有成员) 。using声明语句中名字的访问权限由该using声明语句之前的访问说明符来决定。

例子如下:

//.h
class Base
{
public:
	int base_public = 1;
	void func1();
protected:
	int base_protect = 2;
	void func2();
private:
	int base_private = 3;
	void func3();
};

class Derive1 :private Base //私有继承
{
public:
	//在public作用域声明基类中的成员
	using Base::base_public; //成功,基类公有->派生类公有
	using Base::func1; //成功,基类公有->派生类公有
	using Base::func2; //成功,基类保护->派生类公有
protected:
	using Base::base_protect; //成功,基类保护->派生类保护
	using Base::func3; //错误,基类私有->派生类保护;编译器报错 , 不可访问
private:
	using Base::base_private; // 错误, 基类私有->派生类私有;编译器报错 , 不可访问
};

总结:

1、在派生类中利用using声明可以改变基类除私有成员外其他成员的访问权限。
2、改变后该成员在派生类的访问权限由using位于的派生类访问说明符确定。

以上是关于C++ 在派生类中使用using声明改变基类成员的可访问性的主要内容,如果未能解决你的问题,请参考以下文章

c++继承是如何工作的?

C++ - 在派生类中静态初始化基类受保护的成员变量

C++虚函数

C++ 继承&多态

Effective C++ 6.继承与面向对象设计

派生类 C++ 中基类受保护成员的访问声明为公共的