• C++中的“友元”


    经过一番学习,我知道类中有公有部分和私有部分。关于公有部分,我们是可以在类外进行访问的。但是私有部分却只有在类中才可以进行访问。但是想在类外访问私有部分成员也不是没有办法,那就是——友元(friend)。友元的最大作用也就是——在类外访问类中的私有成员。

    友元主要包括两个:友元函数和友元类

    #include<iostream>
    using namespace std;
    
    class Time
    {
    public:
        Time(int, int, int);              //声明构造函数;
        friend void display(Time &);          //声明友元成员函数display(),其中的Time是声明与Time类关联;
    
    private:
        int hour;
        int minute;
        int sec;
    };
    
    Time::Time(int h, int m, int s)            //定义构造函数,给hour、minute、sec赋初值;(初始化)
    {
        hour = h;
        minute = m;
        sec = s;
    }
    
    void display(Time &t)                  //注意,这里多了个‘t’,这个形参t是Time类对象的引用。
    {
        cout << t.hour << ":" << t.minute << ":" << t.sec << endl;
    }
    
    int main()
    {
        Time t1(10, 13, 16);                //这里定义一个Time类的t1,并且赋值为hour=10、minute=13,sec=16.
        display(t1);                      //这里调用display函数,并将实参t1的值带入形参t。
        return 0;
    }

    上述例子是将一个普通函数声明为友元函数,这其实和类的成员函数引用看起来很相似,但是二者有本质上的区别。类的成员函数的引用,是类的内部调用;而友元函数则是在类外调用类中的私有成员,二者看起来虽然有些相似,但是千万不能弄混淆。

    将普通函数声明为友元函数使用,虽然是可以的,但是在实际操作中用的不多,大多是直接内部调用即可。而友元函数最大的作用是——在一个类中调用另一个类中的成员函数。

    #include<iostream>
    using namespace std;
    class Date;
    class Time
    {
    public:
        Time(int, int, int);
        void display(Date &);        //注意,此display函数属于Time类,但是指向了Date类;
    
    private:
        int hour;
        int minute;
        int sec;
    };
    
    class Date
    {
    public:
        Date(int, int, int);
        friend void Time::display(Date &);      //这里声明了函数display是Date的友元函数,这个函数本身还是在Time类中(可以在这个display函数中调用Date类中的私有成员);
    private:
        int month;
        int day;
        int year;
    };
    
    Time::Time(int h, int m, int s)
    {
        hour = h;
        minute = m;
        sec = s;
    }
    
    Date::Date(int m, int d, int y)
    {
        month = m;
        day = d;
        year = y;
    }
    
    void Time::display(Date &d)                      //在使用这个友元函数display时也要特别注意,引用了一个'd'('d'是一个形参);
    {
        cout << d.month << "/" << d.day << "/" << d.year << endl;
        cout << hour << ":" << minute << ":" << sec << endl;
    }
    
    int main()
    {
        Time t2(10, 13, 16);
        Date d2(12, 25, 76);
        t2.display(d2);                          //t2引用Time类中的函数display,函数display调用了Date类中的私有成员;
    return 0; }

    再次点明开头——“友元”的最大作用就是:在类外访问类中的私有部分。

  • 相关阅读:
    8月面试题目收录
    html5读取本地文件,图片预览
    Identity Server4资料
    vue与Element实际应用参考
    webpack与vue环境搭建(转载)
    .NET使用Bogus生成大量随机数据(转载)
    Docker笔记:常用服务安装——Nginx、MySql、Redis(转载)
    RabbitMQ操作代码封装
    RSA加密与解密
    .NET CORE编写控制台程序应有的优雅姿势(转载)
  • 原文地址:https://www.cnblogs.com/heng-xing/p/13665887.html
Copyright © 2020-2023  润新知