【友元函数和友元类】

目录

一、友元函数

 二、友元类


将或则函数设置为友元可以突破为类域的限制,可以访问类中的private私有成员,这其实是违背了封装的原则。

一、友元函数

下面例子 Test()函数要想知道A类中_a成员,就需要提供一个接口比如说GetValue去获取_a

class A
{
private:
	int _a = 0;

public:
	A()
	{
		_a = 10;
	}

	// 获取_a的值
	int GetValue()
	{
		return _a;
	}

};

void Test()
{
	A a;
	cout << a.GetValue() << endl;
}

int main()
{
	Test();
	return 0;
}

【友元函数和友元类】_第1张图片

 将Test()函数设置为A类的友元函数,可以访问里面的_a成员

class A
{
private:
	int _a = 0;

public:
	friend void Test();
	A()
	{
		_a = 10;
	}

	// 获取_a的值
	int GetValue()
	{
		return _a;
	}

};

void Test()
{
	A a;
	cout << a._a << endl;;
}

【友元函数和友元类】_第2张图片

 二、友元类

下面的例子,B类要想获取A类中的_a成员,就调用一个GetValue方法获取_a的值

class A
{
private:
	int _a = 0;

public:
	A()
	{
		_a = 10;
	}

	// 获取_a的值
	int GetValue()
	{
		return _a;
	}
};

class B
{
private:
	int _b;

public:
	B()
	{
		_b = 20;
	}
	// 获取_a的值
	void CallA()
	{
		A a;
		cout << a.GetValue() << endl;;
	}
};

int main()
{
	B b;
	b.CallA();
	return 0;
}

【友元函数和友元类】_第3张图片

 将B类设置为A类的友元类就可以访问_a成员了

class A
{
private:
	int _a = 0;

public:
	// 将B类设置为A的友元
	friend class B;
	A()
	{
		_a = 10;
	}

	// 获取_a的值
	int GetValue()
	{
		return _a;
	}
};

class B
{
private:
	int _b;

public:
	B()
	{
		_b = 20;
	}
	// 获取_a的值
	void CallA()
	{
		A a;
		cout << a._a << endl;
	}
};

int main()
{
	B b;
	b.CallA();
	return 0;
}

【友元函数和友元类】_第4张图片

 

你可能感兴趣的:(面试,数据结构,c++,算法)