include <iostream. h> class X private: int x friend long Power(X&, int) public (inta=0):x(a)各 void Set(int a)i X=a, 1 int Geto returnx; J ∥待续
#include <iostream.h> class X { private: int x; friend long Power(X&, int); public: X(int a = 0) : x(a) {} void Set(int a) { x = a; } int Get() { return x; } }; // 待续
由于友元不是类中的成员函数而只是一个普通函数,所以习 惯上总是在类外定义,即使是内联函数也是如此。对于本例 而言,上述的“待续”由以下的内容替换: long Power(X& rx, int exp) long power= 1 while(exp >0) i 注意:由于友元 Power(0不是 类X的成员函数,所以this指 power=rX.X, 针与它无关。为了能够访问类 exp 中的成员,就只有利用参数将 X类的对象传给它以使其有访 return power; 问对象中成员的机会。 友元至少应当有一个说明它的 类类型的参数。 ∥待续
由于友元不是类中的成员函数而只是一个普通函数,所以习 惯上总是在类外定义,即使是内联函数也是如此。对于本例 而言,上述的“待续”由以下的内容替换: long Power(X& rx, int exp) { long power = 1; while(exp > 0) { power *= rx.x; exp --; } return power; } // 待续 注意:由于友元 Power() 不是 类 X 的成员函数,所以 this 指 针与它无关。为了能够访问类 中的成员,就只有利用参数将 X 类的对象传给它以使其有访 问对象中成员的机会。 友元至少应当有一个说明它的 类类型的参数
11.1.2使用友元函数 友元是一个普通函数,因此它与所有非成员函数的用法完全 样。例,用以下内容替换上述“待续” void maino x aX(5) cout < Power(ax, 3)<<endl; 从输出125
11.1.2 使用友元函数 友元是一个普通函数,因此它与所有非成员函数的用法完全 一样。例,用以下内容替换上述“待续”: void main() { X aX(5); cout << Power(aX, 3) << endl; // 输出 125 }
1113成员函数用作友元 从理论上讲,只要类给予授权,任何一个函数都可以成为友元。 自然,一个类中的成员函数可以作为另一个类的友元。例 class Y ∥超前说明 class X t public (inta=0):x(a)各} void Set(Y& ry) X=ryy Geto i return X
11.1.3 成员函数用作友元 从理论上讲,只要类给予授权,任何一个函数都可以成为友元。 自然,一个类中的成员函数可以作为另一个类的友元。例: class Y; // 超前说明 class X { int x; public: X(int a = 0) : x(a) {} void Set(Y& ry) { x = ry.y; } int Get() { return x; } };
class Y y public Y(inta=0):y(a)各} void Set(int a)i y=a; y int Get( return y; y friend voidⅩ∴Set(Y&); #include <iostream.h> void maino Y aY(5); x aX. aX set(aY) cout < ax Geto << It'<< aY.Get( < endl
class Y { int y; public: Y(int a = 0) : y(a) {} void Set(int a) { y = a; } int Get() { return y; } friend void X :: Set(Y&); }; #include <iostream.h> void main() { Y aY(5); X aX; aX.Set(aY); cout << aX.Get() << '\t' << aY.Get() << endl; }