友元

1.友元的三种形式

(1).普通的非成员函数被定义为类的友元函数

  • 友元函数的声明可以放在私有部分,也可在公有部分,没区别。
  • 一个函数可以是多个类的友元函数,只需要在各个类中分别声明。
  • 友元函数的调用与一般函数的调用方式和原理一致。

(2).把其他类的成员函数定义成友元

class Student;
class Teacher
{
private:
    Student* pT;
public:
    void assignGrade(Student& s);   
};

void test(Student&s);

class Student
{
private:
    Teacher *pT;
    int someHours;
    double grade;
public:
    friend void Teacher::assignGrade(Student& s);
    friend void test(Student& s);
};

void test(Student&s){
    int i=s.someHours;
}

(3).友元类

class Student;
class Teacher
{
private:
    Student* pList;
public:
    void assignGrade(Student &s); 
    void adjustHours(Student &s);
};
class Student 
{
private: 
    Teacher*pT; 
    int somesterHours; 
    double grade;
public: 
    friend class Teacher;//在学生类种把教师类声明为友元类 
}; 

2.友元的使用场合

  • 运算符重载的某些场合需要使用友元。
  • 两个类要共享数据时。
  • 注意,友元函数破坏了封装机制,尽量不要使用友元函数。

3.友元函数与类成员函数的区别

  • 成员函数有this指针,而友元函数没有this指针。
  • 友元函数是不能被继承的,就像父亲的朋友未必是儿子的朋友。
  • 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
  • 友元关系不具有传递性。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转:关于C++中的友元函数的总结 1.友元函数的简单介绍 1.1为什么要使用友元函数 在实现类之间数据共享时,减少...
    资深小夏阅读 4,090评论 0 0
  • (1).友元函数为了实现类之间数据共享时,减少系统开销,提高效率。允许外面的类或函数去访问类的私有变量和保护变量,...
    Wangcy阅读 4,671评论 0 0
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,153评论 1 51
  • 已经是许久没有写过东西了,除了公务员考试的申论小作文。有的时候写文章也不一定非得一鸣惊人,写写自己的小伤感...
    杰兰特_4f8c阅读 2,976评论 0 0
  • 宁寿宫花园(后称乾隆花园)位于北京故宫宁寿宫区的西北角,建于乾隆三十六年到四十一年(公元1771—1776年),共...
    巍言大义阅读 4,746评论 0 50

友情链接更多精彩内容