美文网首页
c++ 友元

c++ 友元

作者: 杀破魂 | 来源:发表于2020-01-24 08:50 被阅读0次

在c++中,通过关键字friend声明为友元。友元可以范围与其有好友关系的类中私有成员。友元包括友元函数和友元类。

友元函数

如果在本类以外的其他地方定义一个函数(这个函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数),在对本类进行声明时在类体重用friend对改函数进行声明,此函数就称为友元函数

普通函数声明为友元函数


#include<iostream>
using namespace std;
 
class Time
{
public:
    Time(int, int, int);
        friend void display(Time &);//声明display函数为Time类的友元函数
private:
    int hour;
    int minute;
    int sec;
};
 
Time::Time(int h, int m, int s)
{
    hour = h;
    minute = m;
    sec = s;
}
 
void display(Time &t)
{
    cout << t.hour <<":" << t.minute << ":" <<t.sec << endl;
}
 
int main(void)
{
    Time t1(10, 13, 56);
    display(t1);
    return 0;
}

display是一个在类外定义的且未用类Time的限定函数,它是非成员函数,不属于任何类。

友元成员函数


#include<iostream>
using namespace std;
 
class Date;//对Date类的提前引用声明
class Time
{
public:
    Time(int, int, int);
    void display(Date &);
private:
    int hour;
    int sec;
    int minute;
};
 
class Date
{
public:
    Date(int, int, int);
    friend void Time::display(Date &);//声明Time类中display函数为本类的友元成员函数
private:
    int mouth;
    int day;
    int year;
};
 
Time::Time(int h, int m, int s)
{
    hour = h;
    minute = m;
    sec = s;
}
 
void Time::display(Date &d)
{
    cout << d.mouth << "/" << d.day << "/" << d.year << endl;
    cout << hour << ":" << minute << ":" << sec << endl;
}
 
Date::Date(int m, int d, int y)
{
    mouth = m;
    day = d;
    year = y;
}
 
int main(void)
{
    Time t1(10, 13, 56);
    Date d1(4, 15, 2019);
    t1.display(d1);
    return 0;
}

一个函数可以被多个类声明为友元,这样就尅应用多个类中的私有数据。

友元类

将类B声明为另一个类A的友元,这是B类就是A类的友元类。友元类B中的所有函数都是A类的友元函数,可以访问A类中的所有成员。
在A类的定义体走咯个声明B类为其友元类:
friend B;
声明友元类的一般格式为
friend 类名;

注意:

  • 友元关系是单向的,不是双向的。声明了B类是A类的友元类,不等于A类是B类的友元类,A类中的成员函数不能访问B类中的私有数据。
  • 友元关系不能传递。如果 B类是A类的友元类,C类是B类的友元类,不等于C类是A类的友元类。

友元类可以访问其他类中的私有成员,可以说这是对封装原则的一个小的破坏。

相关文章

  • c++ 友元

    在c++中,通过关键字friend声明为友元。友元可以范围与其有好友关系的类中私有成员。友元包括友元函数和友元类。...

  • C++语言基础(03)

    1.内存分配 C/C++ 内存分区: java 创建对象 2.常函数 3.友元函数和友元类 友元函数 友元类 4....

  • C++中的友元

    友元的介绍 什么是友元?友元是C++中的一种关系友元关系发生在函数与类之间或者类与类之间友元关系是单项的,不能传递...

  • C++友元

    friend类: 如果class A想让class B访问它的成员,只需要在class A中将class B声明称...

  • C++友元

    我承认你是我的朋友,你才是,当有一天,我觉得你有背叛我,除了你的名,你就再也不会进入我的内心。

  • C++ 友元

    ​ 采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一 般定义为公有的,依此提供...

  • C++ 友元

    小项备注时间2020 年 3 月 28 日修改时间2020 年 3 月 28 日城市北京市房山区天气晴心情你猜 0...

  • C++ 友元

    友元 待续

  • 10-C++远征之模板篇-学习笔记

    C++远征之模板篇 将会学到的内容: 模板函数 & 模板类 -> 标准模板类 友元函数 & 友元类 静态数据成员 ...

  • 慕课网-C++远征之模板篇(上)-学习笔记

    C++远征之模板篇 将会学到的内容: 模板函数 & 模板类 -> 标准模板类 友元函数 & 友元类 静态数据成员 ...

网友评论

      本文标题:c++ 友元

      本文链接:https://www.haomeiwen.com/subject/luutthtx.html