类的友元函数:

类的友元函数:

/*
类的友元函数:
1、友元函声明在类中任何访问权限内
2、同一个对象,在main中不能访问私有,传入友元函数,就可以访问了
3、引用传递和值传递的实参,形式上是一样的
4、保护类型中的成员,友元函数也可以访问
5、友元函数中调用成员函数或者调用成员变量,都需要类对象
6、友元函数能够使用类中所有的成员,但是都需要使用类对象来调用
*/

#include<iostream>

using namespace std;

class demo{
	public:
		demo()
		{
			a = 0;
			c = 0;
		}
		//friend void out_print(demo &did); //ok
		void set_num(int num)
		{
			a = num;
		}
		void func1();
	protected:
		int c;
		friend void out_print(demo &did);
		void func2();
	private:
		int a;
		void func3();
		//friend void out_print(demo &did); //ok
};

//类成员函数初始化
void demo::func1(){
	cout << "func1 in public" << endl;
}

void demo::func2(){
	cout << "func2 in protected" << endl;
}

void demo::func3(){
	cout << "func3 in private" << endl;
}
//引用传递和值传递一样都是把值作为实参传入
void out_print(demo &did)
{
	cout << "func out_print" << endl;
	cout << "did.a = " << did.a << endl; //ok
	//友元函数也可以访问类的保护类型
	cout << "did.c = " << did.c << endl;
	did.c = 500;
	cout << "did.c = " << did.c << endl;
	/*友元函数调用成员函数*/
	//func2(); error 友元函数中调用成员函数或者调用成员变量,都需要类对象来调用
	did.func1(); //ok
	did.func2(); //ok
	did.func3(); //ok
}

int main()
{
	demo did;
	//cout << "main did.a = " << did.a << endl;  error 同一个对象,在main中不能访问私有,传入友元函数,就可以访问了
	cout << "sed num of class demo" << endl;
	did.set_num(250);
	cout << "start to friend func" << endl;
	out_print(did);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值