类的友元函数:

类的友元函数:

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

#include

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;
}

你可能感兴趣的:(笔记,c++,visual,studio,开发语言)