精华内容
下载资源
问答
  • 一个对象私有数据,只能通过成员函数访问。...在一个类A中,如果将关键字friend冠于一个函数原型或类名之前,则该函数或类成为类A的友元。 例: class A { private: int i; void MemberFun(in...

    一个对象的私有数据,只能通过成员函数访问。
    但是C++提供了一种辅助手段——定义类的友元。【友元可以访问类的所有成员。友元可以是一个普通函数,成员函数或者另外一个类。】
    友元是非对称的,非传递的。除非特别声明。
    在一个类A中,如果将关键字friend冠于一个函数原型或类名之前,则该函数或类成为类A的友元。
    例:

    class A
    {
    private:
    int i;
    void MemberFun(int);
    friend void FriendFun(A*,int)
    }

      void FriendFun(A*ptr,int x)            //友元函数通过**参数**访问类的私有数据成员
      { ptr->i=x;};
      void A::MemberFun(int x)             //成员函数通过**this**指针访问类的私有数据成员
      { i=x;};
    

    友元函数必须在参数表中显示地指明要访问的对象(就像朋友要用你的东西时要标注你的名字)
    例:
    A Aobj;
    FriendFun(&Aobj,5); //指明对象Aobj【通过对象访问私有数据成员。】
    Aobj.MemberFun(5); //通过对象调用类的成员函数。

    展开全文
  • c++友元函数简单理解

    2020-05-23 15:23:05
    友元函数的使用 因为友元函数没有this指针,则参数要有三种情况: 要访问非static成员时,需要对象做参数; 要访问static成员或全局变量时,则不需要对象做参数; 如果做参数的对象是全局对象,则不需要对象做...

    友元函数的使用

    因为友元函数没有this指针,则参数要有三种情况: 

    要访问非static成员时,需要对象做参数;

    要访问static成员或全局变量时,则不需要对象做参数;

    如果做参数的对象是全局对象,则不需要对象做参数.

    可以直接调用友元函数,不需要通过对象或指针

    实例代码:

    class INTEGER
    {
        friend void Print(const INTEGER& obj);//声明友元函数
    };
    
    void Print(const INTEGER& obj)
    {
        //函数体
    }
    
    void main()
    {
        INTEGER obj;
        Print(obj);//直接调用
    }
    展开全文
  • 这里重新将类的成员函数的定义看一下:百科上的认识:类的成员函数的原型要写在类体中,原型说明了函数的参数表和返回值类型。而函数的定义一般在类...这里在百科上对友元函数的解释:友元函数是指某些虽然不是类成...

    这里重新将类的成员函数的定义看一下:

    百科上的认识:

    类的成员函数的原型要写在类体中,原型说明了函数的参数表和返回值类型。而函数的定义一般在类外面,也可以直接在类内部定义。前者与普通函数不同的是,实现成员函数时要指明类的名称,具体形式为:

    返回值类型 类名 :函数成员名(参数表){函数体};

    而后者一般为一些短小的函数(5行以内),也就是内联函数。

    这里在百科上对友元函数的解释:

    友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。

    1.为什么要使用友元函数

    优点:能够提高效率,表达简单、清晰。

    也有缺点:破坏了程序的封装性。有时候不到万不得已的时候才使用。

    代码解释:

    #include

    #include

    using namespace std;

    class ca {

    string id;

    void setId(string s) {

    id = s;

    }

    protected:

    string name;

    void setName(string s) {

    name = s;

    }

    public:

    void print() {

    cout << id << " " << name << " " << endl;

    }

    friend void fun(ca& a); //申明全局函数作友元,允许它访问私有保护成员

    };

    class derive : public ca { }; //ca类的派生类

    void fun(ca& a) { //作友元的函数要定义在那个类的后面

    a.id = "987"; //这是ca类的私有成员

    a.setName("xyz"); //这是ca类的保护成员

    }

    int main ( )

    {

    ca a;

    //a.fun(...); //友元函数不是当前类的成员函数,所以这句编译出错

    fun(a);

    a.print();

    derive d;

    fun(d); //作参数时,类型转换为ca类

    d.print();

    return 0;

    }

    运行结果:

    987  xyz

    987  xyz

    在就是友元函数的位置:可以在类外或者类内

    声明方式:friend+普通函数声明

    实现方式:像普通函数那样直接调用

    还有一点的是:其实一些操作符的重载实现也是要在类外实现的,那么通常这样的话,声明为类的友元是必须滴。(这就像我学的那个坐标类,直接用操作符重载,声明友元函数)

    最后一个知识点:

    友元函数和类的成员函数的区别:

    1.成员函数有this指针,而友元函数没有this指针。

    2.友元函数是不能被继承的,就像父亲的朋友未必是儿子的朋友。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    展开全文
  • 这里重新将类的成员函数的定义看一下:百科上的认识:类的成员函数的原型要写在类体中,原型说明了函数的参数表和返回值类型。而函数的定义一般在类外面,也可以直接...这里在百科上对友元函数的解释: 友元函数是...

    这里重新将类的成员函数的定义看一下:

    百科上的认识:

    类的成员函数的原型要写在类体中,原型说明了函数的参数表和返回值类型。而函数的定义一般在类外面,也可以直接在类内部定义。前者与普通函数不同的是,实现成员函数时要指明类的名称,具体形式为:
    返回值类型 类名 ::函数成员名(参数表){函数体};
    而后者一般为一些短小的函数(5行以内),也就是内联函数

    这里在百科上对友元函数的解释:

            友元函数是指某些虽然不是成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。

    1.为什么要使用友元函数

    优点:能够提高效率,表达简单、清晰。

    也有缺点:破坏了程序的封装性。有时候不到万不得已的时候才使用。


    代码解释:

    #include <iostream>
    #include <string>
    using namespace std;


    class ca {
        string id;
        void setId(string s) {
            id = s;
        }
    protected:
        string name;
        void setName(string s) {
            name = s;
        }
    public:
        void print() {
            cout << id << "  " << name << "  " << endl;
        }
       
    friend void fun(ca& a);    //申明全局函数作友元,允许它访问私有保护成员
    };


    class derive : public ca { };    //ca类的派生类


    void fun(ca& a) {        //作友元的函数要定义在那个类的后面
        a.id = "987";        //这是ca类的私有成员
        a.setName("xyz");    //这是ca类的保护成员
    }


    int main ( )
    {
        ca a;
        //a.fun(...);    //友元函数不是当前类的成员函数,所以这句编译出错
        fun(a);
        a.print();


        derive d;
        fun(d);    //作参数时,类型转换为ca类
        d.print();


        return 0;

    }

    运行结果:

    987  xyz

    987  xyz


    在就是友元函数的位置:可以在类外或者类内

    声明方式:friend+普通函数声明

    实现方式:像普通函数那样直接调用


    还有一点的是:其实一些操作符的重载实现也是要在类外实现的,那么通常这样的话,声明为类的友元是必须滴。(这就像我学的那个坐标类,直接用操作符重载,声明友元函数)

    最后一个知识点:

    友元函数和类的成员函数的区别:

    1.成员函数有this指针,而友元函数没有this指针。

    2.友元函数是不能被继承的,就像父亲的朋友未必是儿子的朋友。



    展开全文
  • 对c++友元函数和友元类的理解

    千次阅读 2016-06-26 20:44:00
    1,友元函数的定义和作用 我们已知道类具有封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的。非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为...
  • 友元函数初步理解

    2009-08-12 16:18:47
    [color=red]友元函数-----不是类成员函数,但却能访问类数据成员。[/color] [color=red]定义[/color]: friend Student &visit(Student &stu,char *name,char newsex); [color=red]实现[/color]: ...
  • 这里在百科上对友元函数的解释: 友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新...
  • C++友元函数

    2018-08-10 16:09:03
    C++友元函数的理解 我们知道,C++ 的三大特性之一:封装。 如果我们需要对外部提供一个接口,去访问某个类中的全部成员(不管是public还是private)。则C++的友元函数能够为我们实现。关于友元函数的具体实现我就...
  • 一般情况下,使用一个函数需要先声明,或者定义在前,但是声明一个全局函数为友元函数的时候,可以理解为只是声明,而非调用,因此不用先在类的前面声明该全局函数。另外,如果要在类的前面声明该友元函数,需要用到...
  • 友元函数

    2019-10-01 14:36:53
    即便友元函数的原型出现在类定义中,友元函数并不是成员函数,这一点尤其需要注意。 友元可以是函数、函数模版、成员函数;或者所有成员都是友元的类或类模版。 所以不要局限对友元的理解。 声明一个类的友元...
  • 友元在我的理解中是“朋友之间互通有无的一种表现”,只要在类体中声明了某个函数友元(切记:这个函数为外来函数,并不是类的成员函数),那么无论这个函数声明在类体中那个位置(private,protected,public三者...
  • 在程序里,有些私有属性 也想让类外特殊一些函数或者类进行访问,就需要用到友元的技术,友元的目的就是让一个函数或者类 访问另一个类中私有成员 友元的关键字为 friend 友元的三种实现: 1、全局函数友元 2、...
  • 换言之,某个类的友元函数的声明只能在这个类的内部,可以在private部分也可以在public部分,一般做法是将友元声明成组地放在类定义的开始或结尾处。 友元函数的形式: friend <返回类型> <函数名> (&...
  • NULL 博文链接:https://jacky-dai.iteye.com/blog/2305426
  • 友元的特点就是他是普通函数,并不是成员函数。他可以调用这个类私有成员。 这里有个实际用法: 如上redisAsyncCommand函数,其中第二个参数为函数指针。 这里不能反成员函数指针。因为成员函数指针里面...
  • 在学习c++这一块,关于友元函数和友元类,感觉还是不好理解,但是井下心来,理解,需要把我一下几点。首先讲友元函数。(1)友元函数:1)C++中引入友元函数,是为在该类中提供一个对外(除了他自己意外)访问窗口;2)这...
  • 友元函数友元类.

    2017-08-04 20:33:00
    友元能够理解为是类“朋友”。...友元函数是在类外定义一个函数,不是类成员函数。这个函数能够是普通C++函数,或者是其它类成员函数。即普通友元函数和友元成员函数。友元函数是定义在类...
  • 搬运自:... ... 友元包括友元函数、友元类 友元函数: 个人理解为在类中声明可以外部访问类内部成员变量一个函数,这个函数并不是类成员函数,只是在类中声明,而定义在类外。换...
  • 友元函数,友元类

    2013-11-19 13:31:22
    2. 友元函数的用处体现在哪里?  2.1 使用友元函数可提高性能,如:用友元函数重载操作符和生成迭代器类  2.2 用友元函数可以访问两个或多个类的私有数据,较其它方法使人们更容易理解程序的逻辑
  • 类中,声明友元函数的关键字为friend,声明的位置和public或private 无关。具体示例代码如下。 2.示例代码 #include "iostream" using namespace std; class A { public: friend void modifyA(A *pA,int _a);//...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 395
精华内容 158
关键字:

友元函数的理解