一步一步学习C++(类)之友元函数

友元函数使用说明
1)必须在类的说明中说明友元函数,说明时以关键字friend开头,后跟友元函数的函数原型,友元函数的说明可以出现在类的任何地方,包括在private和public部分;
2)注意友元函数不是类的成员函数,所以友元函数的实现和普通函数一样,在实现时不用"::"指示属于哪个类,只有成员函数才使用"::"作用域符号;
3)友元函数不能直接访问类的成员,只能访问对象成员,
4)友元函数可以访问对象的私有成员,但普通函数不行;
5)调用友元函数时,在实际参数中需要指出要访问的对象,
6)类与类之间的友元关系不能继承。
7)一个类的成员函数也可以作为另一个类的友元,但必须先定义这个类
<span style="font-size:12px;">// FriendForClass.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

class MyClassY; //提前声明
class MyClassZ; //提前声明

class MyClassX 
{
	friend class MyClassZ;
public:
	void print();
	void setX(MyClassY &s,int dis);
	friend void distance(MyClassX &a,MyClassX &b);/*友元函数*/
	
private:
	int x;
	int y;
	static int z;
};

int MyClassX::z = 0;//一定要记得赋值

class MyClassY
{
public:
// 	MyClassX可以访问MyClassY的成员私有或者保护数据
	friend void MyClassX::setX(MyClassY &s,int dis);/*友元函数*/

private:
	int x;
	int y;
	
};

class MyClassZ
{
public:
	// 	MyClassZ可以访问MyClassX所有成员
	void displayFor();/*用于访问MyClassZ的成员*/
private:
	int z1;
	int z2;
	MyClassX X;//需要在这里定义一个对象
};
/*********************************************************/
//MyClassZ可以访问MyclassX必须通过类的对象,间接访问成员
void MyClassZ::displayFor()
{
	X.x = 10;
	X.z = 10;
	MyClassX::z = 10;
}

void MyClassX::setX(MyClassY&s,int dis)
{
	s.x = dis;
}
/******************************************************/
//不能直接访问类的成员,必须通过类的对象,间接访问成员
void distance(MyClassX &a,MyClassX &b)
{
	int x1 = a.x;
	int y1 = b.y;
	printf("%d %d",x1,y1);
}
/*********************************/
//成员函数可以直接访问类的成员
void MyClassX::print()
{
	printf("%d %d",x,y);
}

int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}
</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂奔的乌龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值