C++友元函数,友元类


1. 友元的 声明只能出现在类的内部,但是在类内出现的具体位置不限制,友元函数不是类的成员
也不受所在区域访问控制级别的限值
2. 友元函数的 定义可以在类内也可以在类外
3. 友元函数它不是成员函数,它不受作用域的限值,不属于类,也不属于对象, 他就是一个普通的函数
 
友元函数使用典型错误:
 
<wiz_code_mirror>
 
 
 
 
class Count
{
public:
 Count():a(10){};
 friend void fn1(Count obj); //声明友元函数
private:
 int a;
};
//定义友元函数
void fn1(Count obj)
{
 //cout << a << endl //这里是错误的!访问私有成员应该是对象访问!友元函数上面说过是普通函数
      //所以这里需要传入一个对象参数,来访问Count类中的私有成员!
 cout << obj.a << endl;
}
int main(){
 Count obj1;
 fn1(obj1);
}
 
 
 
友元类注意:
例如
1. A 是   B的友元,不代表 B 就是 A的友元    
2. A 是 B的友元, B是C的友元, 不代表 A就是C的友元
友元类例子:
 
<wiz_code_mirror>
 
 
 
 
 
class Count
{
public:
 Count():a(10){};
 friend class CTime; //声明CTime为友元类
private:
 int a;
};
class CTime
{
public:
 void fn1(){
  for (int i = 0; i < 20;i++)
  {
   obj[i].a = i;
  }
 }
 void fn2(){
  for (int i = 0; i < 20;i++)
  {
   printf("%d\n", obj[i].a);
  }
 }
private:
 Count obj[20]; //定义20个Count对象
};
int main(){
 CTime cls;
 cls.fn1();
 cls.fn2();
}
 
 
 
令一个类中单个成员函数作为另一个类中的友元函数
需要严格把控代码顺序:
 
<wiz_code_mirror>
 
 
class Student;       //这里声明Student
class Teacher
{
public:
 Teacher(){}
 int clear(Student obj);    //1.我们先定义Teacher类,其中声明clear函数
          //这里切记不能定义它
};
class Student
{
public:
 Student() :m_score(123){}
 friend int Teacher::clear(Student obj);//2.接下来定义Student类,其中包括对clear的友元声明
private:
 int m_score;
};
int Teacher::clear(Student obj){   //3.定义clear,这时候才能使用Student成员
 return obj.m_score;
}
int _tmain(int argc, _TCHAR* argv[])
{
 Student obj1;
 Teacher obj2;
 cout << obj2.clear(obj1) << endl;
 return 0;
}
 
 
 
 
 
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM