虹夜 2022-05-30 00:58 采纳率: 50%
浏览 73
已结题

友元函数,这个为什么会报错呀?


#include"X.h"

#include"Y.h"

int main()
{
    Y b(10,"stringy");
    X a(10,"stringx");
    b.show(a);
    return 0;
}

#ifndef X_H_INCLUDED

#define X_H_INCLUDED

class X
{
public:
    int x;
    char *strx;
public:
    X(int a,char *str)
    {
        x=a;
        strx=new char[strlen(str)+1];
        strcpy(strx,str);
    }
    friend void show(X &ob);
};


#endif // X_H_INCLUDED

#ifndef Y_H_INCLUDED

#define Y_H_INCLUDED

#include"X.h"
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
class X;
class Y
{
    int y;
    char *stry;
public:
    Y(int b,char *str)
    {
        y=b;
        stry = new char[strlen(str)+1];
        strcpy(stry,str);
    }
    void show(X &ob)
    {
        cout<<"the string of y is:"<<stry<<endl;
        cout<<"the string of x is:"<<ob.strx<<endl;
    }
};
#endif // Y_H_INCLUDED
  • 写回答

3条回答 默认 最新

  • 歇歇 2022-06-05 02:45
    关注
    1. 什么是友元函数?
      一个类的私有数据成员通常只能由类的函数成员来访问,而友元函数可以访问类的私有数据成员,也能访问其保护成员
    2. 友元函数的用处体现在哪里?
      2.1 使用友元函数可提高性能,如:用友元函数重载操作符和生成迭代器类
      2.2 用友元函数可以访问两个或多个类的私有数据,较其它方法使人们更容易理解程序的逻辑关系
    3. 使用友元函数前应注意:
      3.1 类的友元函数在类作用域之外定义,但可以访问类的私有和保护成员
      3.2 尽管类定义中有友元函数原型,友元函数仍然不是成员函数
      3.3 由于友元函数不是任何类的成员函数,所以不能用句柄(对象)加点操作符来调用
      3.4 public, private, protected成员访问符与友员关系的声明无关,因此友元关系声明可在类定义的任何位置,习惯上在类定义的开始位置
      3.5 友元关系是指定的,不是获取的,如果让类B成为类A的友元类,类A必须显式声明类B为自己的友元类
      3.6 友元关系不满足对称性和传递性
      3.7 如果一个友元函数想与两个或更多类成为友元关系,在每个类中都必须声明为友元函数
    4. 注:由于C++属于混合语言,常在同一个程序中采用两种函数调用且这两种函数调用往往是相反的。类C语言的调用将
      基本数据或对象传递给函数,C++调用则是将函数(或信息)传递给对象
      https://blog.csdn.net/liubinstud/article/details/6134125
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月14日
  • 已采纳回答 6月6日
  • 赞助了问题酬金5元 5月30日
  • 创建了问题 5月30日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)