友员函数 friend

1、普通函数做友员函数,为什么,什么场景?(<<运算符重载)
2、某个类的成员函数作为另一个类的友员函数?(如何使用)
3、友员类,有啥作用(声明后其成员都变为另一个类的友员)
3、友员函数是如何定义的 ? (声明名和定义)
4、友员函数是否可以继承? (基类和派生类)
5、一个类的成员函数是否可以作为另一个类的友员函数? (类A 和 类B,定义的先后顺序)
6、友员函数的优缺点,是否推荐使用?

1、
class A
{
	private:
		int x;
	public:
		A(int xx):x(xx){
		}

		friend void print(A &a);//声明友员 
	
};

void print(A &a)
{
	cout<<a.x<<endl;//在友员函数可以直接使用类对象的私有和保护数据 
	return;
}
2、
class B;//先声明这个类下面需要到 

class A
{
private:
	int x;
public:
	A(int xx) :x(xx){}

	void print(B &b);//B类的定义后面给出,前面已经提前给出了声明 
};

class B
{
private:
	int date;
public:
	B(int bb) : date(bb){}
	friend void A::print(B &b);//声明A的成员函数print为该类的友员,故在A类中可以直接使用B类对象的私有和保护数据 
};


void A::print(B &b)//定义类的成员函数 
{
	cout << b.date << endl;//应为已经在B类中声明了该函数为友员函数,所以这里可以在A类中调用B类对象中的私有和保护成员 
	return;
}
int main()
{
	A a(1);
	B b(2);
	a.print(b);
	return 0;
}
3、
class B;//先声明这个类下面需要到 

class A
{
private:
	int x;
public:
	A(int xx) :x(xx){}
	friend class B; //这里声明了B类为友员类,那么就表示B是我的朋友,所以B你可以对我的对象的私有和保护成员有操作权限 
};

class B
{
private:
	int date;
public:
	B(int bb) : date(bb){}
    void print(A &a);
};


void B::print(A &a)//定义类的成员函数 
{
	cout << a.x << endl;//应为已经在A类中声明了B类是A类的朋友,所以这里可以在B类中调用A类对象中的私有和保护成员 
	return;
}
int main()
{
	A a(1);
	B b(2);
	b.print(a);
	return 0;
}
6、

尽量不使用友员函数
缺点:友员函数破坏了类的封装性,降低了类的可靠性和可维护性。
优点:可以更加高效的操作数据,有很高的灵活性,使得C的函数能更好的与C++的类结合,可以更加自然的使用c++的定义输入输出流<<的重载函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值