C++ 如何使操作员过载>&燃气轮机;为文件或用户的输入工作

C++ 如何使操作员过载>&燃气轮机;为文件或用户的输入工作,c++,fstream,cin,C++,Fstream,Cin,我想知道我是否可以重载操作符>>,使其可以用于用户输入和读取文件。当我需要用户输入时std::cin>>CCity1 当我需要从文件std::ifstream ifstream(文件名,std::ios::app)>CCity1 class CPerson { std::string m_strName; std::string m_strEGN; friend std::istream& operator>>(std::istream&am

我想知道我是否可以重载操作符>>,使其可以用于用户输入和读取文件。当我需要用户输入时
std::cin>>CCity1
当我需要从文件
std::ifstream ifstream(文件名,std::ios::app)ifstream>>CCity1

class CPerson {
    std::string m_strName;
    std::string m_strEGN;
    
    friend std::istream& operator>>(std::istream& is, CPerson& p) {
        is >> p.m_strEGN >> p.m_strName;
        return is;
    }
};

class CCity {
    std::string city;
    std::vector<CPerson>people;

    friend std::istream& operator>>(std::istream& is, CCity& p) {
        is >> p.city;
        CPerson temp("Empty", "Empty");
        while (std::cin) {
            is >> temp;
            p.people.push_back(temp);
        }
        return is;
    }
class-CPerson{
std::字符串m_strName;
std::字符串m_streng;
friend std::istream&operator>>(std::istream&is,CPerson&p){
是>>下午街>>下午街;
回报是;
}
};
阶级斗争{
字符串城市;
性病:矢量人;
friend std::istream&operator>>(std::istream&is,CCity&p){
是>>p.city;
CPerson temp(“空”、“空”);
while(std::cin){
是>>温度;
p、 人。推回(临时);
}
回报是;
}

您应该为城市使用集装箱:

std::vector<CCity> city_database;
int main()
{
    CCity c;
    while (std::cin >> c)
    {
        city_database.push_back(c);
    }
    //...
    return 0;
}
std::vector city_数据库;
int main()
{
CCity c;
while(std::cin>>c)
{
城市数据库。推回(c);
}
//...
返回0;
}

上面的代码对容器使用了
std::vector
。您可能需要根据需要使用另一个容器。

不,这不是一个无休止的循环。当您运行此代码并通过stdin提供输入时,实际会发生什么?应该是
while(is>>temp){…}
,而不是
while(is){is>>temp;…}
。请参见,首先提取一个每个人都可以轻松复制的。作为新用户,请阅读。