ʲô³¡¾°Ï»áÓõ½ÓÑÔªº¯Êý£¬ÓÑÔªº¯ÊýµÄ×÷ÓÃÊÇʲô£¬ÓÑÔªº¯ÊýºÍÆÕͨ³ÉÔ±º¯ÊýÓÖÓÐÔõÑùµÄÇø±ð£¿ÕⶼÊÇC++µ±ÖеÄһЩ»ù±¾¸ÅÄÕÆÎÕºÃÁËÎÞÂÛÊÇά»¤ÏîÄ¿»¹ÊÇ×öÏîÄ¿¿ª·¢¶¼´óÓÐñÔÒæ¡£±¾ÎÄÖ÷Ҫdz̸һÏÂC++ÖеÄÓÑÔªº¯Êý£¬ÈçÓв»×ã»òÕßÊè©֮´¦£¬·³Çë¶ÁÕßÅóÓѼ°Ê±Ö¸³ö£¬´ó¼ÒÒ»Æð¸Ä½ø¡£
Ò»¡¢¸ÅÊö
ÓÑÔªº¯ÊýÔÚʵÏÖÀàÖ®¼äÊý¾Ý¹²Ïíʱ£¬¿ÉÒÔ¼õÉÙϵͳ¿ªÏú£¬µ÷¸ßЧÂÊ¡£±ÈÈ磺ÀàAÖеĺ¯ÊýÐèÒª·ÃÎÊÀàBÖеijÉÔ±£¬ÄÇôÀàAÖиú¯ÊýÒªÊÇÀàBµÄÓÑÔªº¯Êý¡£
ÓÑÔªº¯ÊýÔÊÐíÍâÃæµÄÀà»òº¯ÊýÈ¥·ÃÎÊÀàµÄ˽ÓбäÁ¿ºÍ±£»¤±äÁ¿£¬´Ó¶øʹÁ½¸öÀ๲Ïíͬһº¯Êý¡£
¶þ¡¢Ê¹Óó¡¾°
ÆäʵһЩ²Ù×÷·ûµÄÖØÔØʵÏÖÒ²ÊÇÒªÔÚÀàÍâʵÏÖ£¬Í¨³£ÉùÃ÷ΪÀàµÄÓÑÔª¡£
½áºÏÉÏÃæËùÊö£¬Ò»°ãÔÚÒÔÏÂÁ½¸ö³¡¾°ÖлáÓõ½ÓÑÔªº¯Êý£º
1¡¢ÔËËã·ûÖØÔصÄijЩ³¡ºÏÐèҪʹÓÃÓÑÔªº¯Êý£»
2¡¢Á½¸öÀàÒª¹²ÏíÊý¾ÝµÄʱºò¡£
Èý¡¢ÓÅȱµã
1¡¢Óŵ㣺Äܹ»Ìá¸ßЧÂÊ£¬±í´ïÇåÎú¡¢¼òµ¥£»
2¡¢È±µã£ºÆÆ»µÁËÀàµÄ·â×°£¨¾¡Á¿²»ÒªÊ¹ÓóÉÔ±º¯Êý£¬³ý·Ç²»µÃÒѲÅʹÓÃÓÑÔªº¯Êý£©¡£
ËÄ¡¢Ê¹ÓÃ˵Ã÷
1¡¢ÓÑÔªº¯ÊýÊÇÀàÍ⺯Êý£¬ÉùÃ÷¿ÉÒÔ·ÅÔÚÀàµÄ˽ÓлòÕß¹«ÓУ¬ÇÒ¶¼Ã»ÓÐÇø±ð£»
2¡¢Ö±½Óµ÷ÓÃÓÑÔªº¯Êý²»ÐèҪͨ¹ý¶ÔÏó»òÕßÖ¸Õ룻
3¡¢ÓÑÔªº¯ÊýûÓÐthisÖ¸Õ룬ÇÒ²»Äܱ»¼Ì³Ð£»
4¡¢ÓÑÔªº¯ÊýÉùÃ÷ÐÎʽ friend + ÆÕͨº¯ÊýÉùÃ÷¡£
Îå¡¢¾ÙÀý˵Ã÷
1¡¢ÒÑÖªÁ½µã×ø±ê£¬ÇóÁ½µãÖ®¼äµÄ¾àÀë
#include
#include
using namespace std; class Point { public: Point(double xx, double yy) { x = xx; y = yy; } void GetXY(); friend double Distance(Point &a, Point &b); protected: private: double x, y; }; void Point::GetXY() { cout << "(" << x << "," << y << ")" << endl; } double Distance(Point &a, Point &b) { double length; length = sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y)); //Ëü¿ÉÒÔÒýÓÃÀàÖеÄ˽ÓгÉÔ± return length; } void main(void) { Point p1(3.0, 4.0), p2(6.0, 8.0); p1.GetXY(); //³ÉÔ±º¯ÊýµÄµ÷Ó÷½·¨£¬Í¨¹ýʹÓöÔÏóÀ´µ÷Óà p2.GetXY(); double d = Distance(p1, p2); //ÓÑÔªº¯ÊýµÄµ÷Ó÷½·¨£¬Í¬ÆÕͨº¯ÊýµÄµ÷ÓÃÒ»Ñù£¬²»ÒªÏñ³ÉÔ±º¯ÊýÄÇÑùµ÷Óà cout << "distance=" << d << endl; return; }
ÔËÐнá¹û£º
·ÖÎö£º
ÔڸóÌÐòÖеÄPointÀàÖÐ˵Ã÷ÁËÒ»¸öÓÑÔªº¯ÊýDistance()£¬ËüÔÚ˵Ã÷ʱǰ±ß¼Ófriend¹Ø¼ü×Ö£¬±êʶËü²»ÊdzÉÔ±º¯Êý£¬¶øÊÇÓÑÔªº¯Êý¡£ËüµÄ¶¨Òå·½·¨ÓëÆÕͨº¯Êý¶¨ÒåÒ»Ñù£¬¶ø²»Í¬ÓÚ³ÉÔ±º¯ÊýµÄ¶¨Ò壬ÒòΪËü²»ÐèÒªÖ¸³öËùÊôµÄÀà¡£µ«ÊÇ£¬Ëü¿ÉÒÔÒýÓÃÀàÖеÄ˽ÓгÉÔ±£¬º¯ÊýÌåÖеÄa.x£¬b.x£¬a.y£¬b.y¶¼ÊÇÀàµÄ˽ÓгÉÔ±£¬ËüÃÇÊÇͨ¹ý¶ÔÏóÒýÓõġ£ÔÚµ÷ÓÃÓÑÔªº¯Êýʱ£¬Ò²ÊÇͬÆÕͨº¯ÊýµÄµ÷ÓÃÒ»Ñù£¬²»ÒªÏñ³ÉÔ±º¯ÊýÄÇÑùµ÷Óᣱ¾ÀýÖУ¬p1.Getxy()ºÍp2.Getxy()ÕâÊdzÉÔ±º¯ÊýµÄµ÷Óã¬ÒªÓöÔÏóÀ´±íʾ¡£¶øDistance(p1, p2)ÊÇÓÑÔªº¯ÊýµÄµ÷Óã¬ËüÖ±½Óµ÷Ó㬲»ÐèÒª¶ÔÏó±íʾ£¬ËüµÄ²ÎÊýÊǶÔÏó¡£
2¡¢ÏÂÃæ¶ÔÉÏÃæÀý×ÓÊä³öÁ÷ÖØÔØ£¬ÊäÈëÊä³öÁ÷ÖØÔØÐèÒªÓõ½ÓÑÔªº¯Êý
#include
#include
using namespace std; class Point { public: Point(double xx, double yy) { x = xx; y = yy; } void GetXY(); friend double Distance(Point &a, Point &b); friend ostream &operator <<(ostream &out, Point &b); protected: private: double x, y; }; ostream &operator <<(ostream &out, Point &b) { out << "(" << b.x << "," << b.y << ")" << endl; return out; } void Point::GetXY() { //cout<<"("<
x<<","<
y<<")"<
ÔËÐнá¹û£º
3¡¢Í¨¹ýÓÑÔªº¯ÊýºÍÓÑÔªÀà´òÓ¡ÀàµÄ˽ÓгÉÔ± ·Ö±ð¶¨ÒåÒ»¸öÀàAºÍÀàB £¬¸÷ÓÐÒ»¸ö˽ÓÐÕûÊý³ÉÔ±±äÁ¿Í¨¹ý¹¹Ô캯Êý³õʼ»¯£¬ÀàAÓÐÒ»¸ö³ÉÔ±º¯ÊýShow(B &b)ÓÃÀ´´òÓ¡AºÍBµÄ˽ÓгÉÔ±±äÁ¿£¬·Ö±ðͨ¹ýÓÑÔªº¯ÊýºÍÓÑÔªÀàÀ´ÊµÏִ˹¦ÄÜ¡£
#include
using namespace std;
class B
{
private:
int tt;
friend class A;
friend void Show(A&, B&);
public:
B(int tempB = 100) :tt(tempB) {}//default constructor
};
class A
{
private:
int value;
friend void Show(A&, B&);
public:
A(int tempA = 200) :value(tempA) {}//default constructor
void Show(B &b)
{
cout << "class A memeber function" << endl;
cout << "class A private variable value:" << value << endl;
cout << "class B private variable value:" << b.tt << endl;
cout << endl;
}
};
void Show(A& a, B& b)
{
cout << "friend function" << endl;
cout << "class A private variable value:" << a.value << endl;
cout << "class B private variable value:" << b.tt << endl;
}
void main()
{
A a;
B b;
a.