友元及继承一些特性(using 用法)(仅代表个人观点)

友元函数给程序员提供了对类的特殊访问权限,使得这个友元函数可以直接访问该类的全部成员(具有和成员函数一个级别的访问权限)。

注意:友元函数的访问权限不仅是可以访问该友元全部成员,甚至还可以访问该类的派生类和友元相同的一部分。

友元类声明:

class Base
{
	friend class Derive2;
protected:
	int b_1;
};

定义基类派生类:

class Derive1:public Base
{
protected:
	int D_1;
};

友元类定义:

class Derive2
{
public:
	void f1(Base b) { b.b_1; }       // 1
	void f2(Derive1 _1) { _1.D_1; } // 2
	void f3(Derive1 _1) { _1.b_1; } //  3
};

讲解:第一行由于是友元,可以直接访问protected成员(private成员类似)

     第二行由于友元不具有传递性,即每一个类都控制着各自的访问权限。所以报错报错信息为:“Derive1::D_1”: 无法访问 protected 成员(在“Derive1”类中声明)

        第二行即上面注意的例子,可以访问派生类和基类共有的一部分.

/**********************************************************************************************************/

下面讨论using 关键字使用:

using 不仅是每次写代码声明中 using namespace std;的使用。在c++11中,赋予了更广阔权限。

它可以将派生类从基类继承的成员修改权限。新的权限由派生类中的声明位置权限所定.。

注意:只可以修改派生类可以访问的权限!!!!!

基类声明:

class Base
{
public:
	int x_public;
	int f1() { return 1; }
protected:
	int x_protected;
	int f2() { return 2; }
private:
	int x_private;
	int f3() { return 3; }
};

派生类定义:

class Derive:public Base
{
protected:
	//修改为protected权限
	using Base::x_public;
	using Base::f1;
public:
	//修改为public访问权限
	using Base::x_protected;
	using Base::f2;
	//错误!!不可以修改派生类不可以访问的元素权限
	using Base::x_private;
	using Base::f3;
};

/********************************************************************************************************/

struct 和 class 区别只有默认的访问权限,和默认继承方式不同,struct 是public 而 class 是private





猜你喜欢

转载自blog.csdn.net/qq_41657315/article/details/80923547