鱼C论坛

 找回密码
 立即注册
查看: 2366|回复: 2

C++文件读入与友元函数

[复制链接]
发表于 2020-10-17 17:13:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class Base {
protected:
        struct tm* timeinfo;                                                       
        time_t rawtime;                                                                       
        string password;                                                               
public:
        int name;
}
class NOW:public Base{
public:
        friend ifstream & operator >> (ifstream & input, NOW& a);
        string nickname;
}
在后续文件读取中:
   NOW* now;
    ifstream in("try.txt", ios::in);
     if (!in.is_open())
         cout << "Error opening file"; exit(1);
         while (!in.eof())
     {
        in>>now->password;//这里会报错,说变量无法访问
        }
//可是我不是声明友元函数了,password也不是父类私有而是父类保护,子类可以访问的呀?
求大佬解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-17 17:14:28 | 显示全部楼层
顶,求大佬解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-18 16:09:55 | 显示全部楼层
class Base {
protected:
        struct tm* timeinfo;                                                      
        time_t rawtime;                                                                       
        string password;                                                               
public:
        int name;
}
class NOW:public Base{
public:
        //重载 >> 操作符能这么写吗?
        friend ifstream & operator >> (ifstream & input, NOW& a);
       //似乎只能这样写
       friend istream & operator >> (istream & input ,NOW & a)
      {
           ifstream in;
            ...
            //因为这个函数是 friend 函数,它不能直接访问类的除静态变量之外的任何成员变量,不管是 private 还是 public,但是
            //它可以访问某个对象的任意成员变量。如下
            in >> a.password;
            return input;
      }
        string nickname;
}

调用这个重载函数是这样调用的。
NOW  now;
cin >> now;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 23:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表