zoukankan      html  css  js  c++  java
  • 友元函数友元类.

    友元能够理解为是类的“朋友”。它能够訪问类的保护和私有成员。友元的作用在于提高程序的执行效率,可是,它破坏了类的封装性和隐藏性。友元能够是一个函数,该函数被称为友元函数;友元也能够是一个类,该类被称为友元类。 

    一、友元函数

    友元函数是在类外定义的一个函数,不是类的成员函数。

    这个函数能够是普通的C++函数,或者是其它类的成员函数。即普通友元函数和友元成员函数。友元函数是定义在类外部。但须要在类体内进行说明,为了与该类的成员函数加以差别。在说明时前面加以keywordfriend。友元函数能够訪问类中的保护和私有成员

    注:友元函数仅仅是打破了类的訪问权限。但要訪问类成员还是须要依靠类对象进行,不能与类的继承混了。

    二、友元函数的定义

    普通友元函数的定义:

        friend  类型标识符  友元函数名(參数列表)。

    友元成员函数(即将其他类的成员函数声明为该类的友元函数)的定义:

        friend  类型标识符  其它类名 ::  友元函数名(參数列表);

    注:1、frinedkeyword仅仅须要在类声明时加。定义时不须要加。

    2、能够将一个普通的全局函数声明为类的友元函数。也能够将还有一个类的成员函数声明为此类的友元。

    如:friend void CStore::f2(int y); //在以引用其他类定义时,须要在本类定义前对其进行声明,如 class CStore;

    三、友元函数与类之间的关系 


    详细实例:

    youyuan1.cpp  //普通函数作为友元

    友元类函数:

    Class Cstudent;  //此处特别重要。Cstudent类在此之前并未声明。此句称为提前引用声明,目的是让编译器知道Cstudent类的名字已经登记在冊了。后面能够引用这个名字。

    Class CTeacher

    {

    public:

          //教师的成员函数,改动某学生的成绩

          void ChangeGrades(Cstudent &s); 

    private

    }

    void CTeacher ::ChangeGrades(Cstudent &s)

    {      //友元成员函数訪问私有成员

            s. Grade[0]=78;

    }

    Class Cstudent

    {

    public: 

            //将教师类的成员函数说明为学生类的友元函数

            friend void CTeacher::ChangeGrades(Cstudent &s);  

    private

            int Grade[3];

    };

    四、友元类

    一、友元类

           一个类能够作还有一个类的友元称为友元类。

           当一个类作为还有一个类的时,意味着这个类的全部成员函数都是还有一个 

    类的友元函数,能够訪问还有一个类的私有成员

     二、声明友元类的语法形式

          friend  class 类名;

    比如:将A类声明为B类的友元类

    Class  B

     {

    ……

        friend class A;      // 声明A为B的友元类

    ……

      }; 

    注意:

    友元关系不具有交换性,即是单向的;

    友元关系不具有传递的。

  • 相关阅读:
    编写第一个MapReduce程序—— 统计气温
    Oracle常用操作——创建表空间、临时表空间、创建表分区、创建索引、锁表处理
    Linux环境安装Eclipse及配置hadoop插件
    Hadoop的核心组件和生态圈
    安装hadoop集群服务器(hadoop1.2.1)
    python入门到精通[三]:基础学习(2)
    python入门到精通[二]:基础学习(1)
    com.mysql.jdbc.Driver 与 org.gjt.mm.mysql.Driver的区别
    Intellij IDEA中修改Maven项目的项目名称
    对CountDownLatch的初步学习
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7287023.html
Copyright © 2011-2022 走看看