c++友元总结

1、友元函数的作用:让不是类的成员函数可以访问该类的私有成员,提高效率。


2、关于友元的几点总结:
    
    2.1 友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。    

    2.2 友元函数是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明。
    
    2.3 一个函数可以是多个类的友元函数,只需要在各个类中分别声明。
    
    2.4 友元不是类的成员,只是一个申明,写在类的任意一个位置都可以。
    
    2.5 友元关系不能被继承,不具有传递性。友元关系是单向的,不具有交换性。

    2.6 类似 goto 语句,不建议经常使用。
    
    2.7 声明一个 其他类 的成员函数为自己的友元,不建议使用。


3、参考代码:

class Point;//申明一个类

class PointManager
{
public:
	//如果解决循环前置声明的问题,应该将函数的声明和函数的定义分开写。
	double PointDistance(Point & p1, Point &p2);
};

class Point
{
public:
	Point(int x, int y)
	{
		this->x = x;
		this->y = y;
	}

	void printPoint()
	{
		cout << "x = " << x << ", y = " << y << endl;
	}

	int getX()
	{
		return this->x;
	}

	int getY()
	{
		return this->y;
	}

	//声明一个全局函数为自己的友元,这里只是申明,写在类中任意一个位置都行。
	friend double PointDistance(Point & p1, Point &p2);

	//声明一个 其他类的成员函数为自己的友元 不建议使用
	friend double PointManager::PointDistance(Point & p1, Point &p2); 

private:

	int x;
	int y;

};


double PointManager::PointDistance(Point & p1, Point &p2)
{
	//int dd_x = p1.getX() - p2.getX();
	int dd_x = p1.x - p2.x;
	
	//int dd_y = p1.getY() - p2.getY();
	int dd_y = p1.y - p2.y;

	return sqrt(dd_x*dd_x + dd_y*dd_y);
}


double PointDistance(Point & p1, Point &p2)
{
	//int dd_x = p1.getX() - p2.getX();
	int dd_x = p1.x - p2.x;
	
	//int dd_y = p1.getY() - p2.getY();
	int dd_y = p1.y - p2.y;

	return sqrt(dd_x*dd_x + dd_y*dd_y);
}

猜你喜欢

转载自blog.csdn.net/amumu_123/article/details/81429831
今日推荐