Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

C++学习之友元函数

来源: sg131971 分享至:

为什么要引入友元函数?

因为我们不能在类的外部访问类的私有变量。

传统的访问方法:

//============================================================================
// Name        : main.cpp
// Author      : ShiGuang
// Version     :
// Copyright   : sg131971@qq.com
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <string>
using namespace std;

class aa
{
private:
	float a;
	float b;
public:
	float &aaa()
	{
		return (a);
	}
	float &bbb()
	{
		return (b);
	}
};

aa sum(aa a, aa b)
{
	aa c;
	c.aaa() = a.aaa() + b.aaa();
	c.bbb() = a.bbb() + b.bbb();
	return (c);
}

int main(int argc, char **argv)
{
	aa a, b;
	a.aaa() = 1;
	a.bbb() = 2;
	b.aaa() = 3;
	b.bbb() = 4;
	aa c = sum(a, b);
	cout << c.aaa() << endl;
	cout << c.bbb() << endl;

	return 0;
}

引入友元函数之后:

//============================================================================
// Name        : main.cpp
// Author      : ShiGuang
// Version     :
// Copyright   : sg131971@qq.com
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <string>
using namespace std;

class aa
{
private:
	float a;
	float b;
public:
	float &aaa()
	{
		return (a);
	}
	float &bbb()
	{
		return (b);
	}
	friend aa sum(aa, aa);
	friend int main(int argc, char **argv);
};

aa sum(aa s, aa t)
{
	aa c;
	c.a = s.a + t.a;
	c.b = s.b + t.b;
	return (c);
}

int main(int argc, char **argv)
{
	aa a, b;
	a.a = 1;
	a.b = 2;
	b.a = 3;
	b.b = 4;
	aa c = sum(a, b);
	cout << c.a << endl;
	cout << c.b << endl;

	return 0;
}

两个函数运行结果完全一样。

对于使用友元:
(1)声明的位置既可在public区,也可在protected区。友元函数虽然是在类内进行声明,但它不是该类的成员函数,不属于任何类。
(2)在类外定义友元函数,与普通函数的定义一样,一般与类的成员函数放在一起,以便类重用时,一起提供其友元函数。
(3) 友元函数是能访问类的所有成员的普通函数,一个函数可以是多个类的友元函数,只需在各个类中分别声明。
(4)友元能使程序精炼,提高程序的效率。
(5)友元破坏了类的封装,使用时,要权衡利弊,在数据共享与信息隐藏之间选择一个平衡点。





Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史