标签:数据 mat cout nbsp ret 关系 std 数学 friend
#include <iostream> #include <cmath> using namespace std; /** * 友元函数:友元函数可以存取私有成员、公有成员和保护成员。 */ //示例1:使用类本身的友元函数 class Point { private: double x,y; public: Point(double a, double b) { x = a; y = b; } double getX() { return x; } double getY() { return y; } //声明一个友元函数,函数定义一般在类体之外;它不是类的成员函数 friend double distance(Point&, Point&); }; //访问Point类中的私有成员x和y double distance(Point &p1, Point &p2) { double dx = p1.x - p2.x; double dy = p1.y - p2.y; return sqrt(dx*dx + dy*dy); } int main() { Point p1(1, 2), p2(3, 4); std::cout << distance(p1, p2) << std::endl; return 0; }
#include <iostream> using namespace std; /* * 友元函数 * 将类的成员函数作为友元函数。声明方式:friend 函数类型 函数所在类名:函数名(参数列表) */ class Two; //先声明类Two,以便One引用Two class One { private: int x; public: One(int a) { x = a; } int getX() { return x; } void func(Two &); }; class Two { private: int y; public: Two(int b) { y = b; } int getY() { return y; } //类Two通过friend关键字将类One的成员func声明为友元函数,所以One的对象可以通过 //函数func访问Two对象的私有成员 friend void One::func(Two &); }; //修改two类的私有成员 void One::func(Two &r) { r.y = x; } int main() { /* 输出结果: x:1,y:2 x:1,y:1 */ One one(1); Two two(2); cout << "x:" << one.getX() << ",y:" << two.getY() << endl; one.func(two); cout << "x:" << one.getX() << ",y:" << two.getY() << endl; return 0; }
#include <iostream> using namespace std; /** * 将一个类说明为另一个类的友元 * 几个注意点: * 1.友元关系是不传递的,即当说明类A是类B的友元,类B又是类C的友元,类A却不是类C的友元。 * 2.当一个要和另一个类协同工作时,使用一个类成为另一个类的友元是很有用的。 * 3.友元声明与访问控制无关,友元函数在私有区域或者在公有区域进行是没有多大的区别的。 */ class One; class Two { private: int y; public: friend class One; //将One说明为Two的友元类,这样的话,One的所有成员函数都是Two的友元函数,可以通过One中的任意一个函数访问two类的私有数据。 }; class One { private: int x; public: One(int a, Two &r, int b) { x = a; r.y = b; } void display(Two &r) { cout << "x:" << x << ",y:" << r.y << endl; } }; int main() { //输出结果:x:1,y:2 Two twoObj; One oneObj(1, twoObj, 2); oneObj.display(twoObj); return 0; }
标签:数据 mat cout nbsp ret 关系 std 数学 friend
原文地址:http://www.cnblogs.com/luoyunshu/p/7647256.html