使用重载运算符的文件操作表达式没有给出预期的结果?

时间:2015-10-22 11:44:59

标签: c++ file

我正在尝试对运行文件的自定义类重载运算符'+'和'='。 运算符'+'重载将右操作数文件的内容附加到左操作数文件。 运算符'='重载将右操作数文件的内容写入左操作数文件。 运算符可以独立地重载工作,但是当在表达式中组合时,它们不会给出预期的结果。 使用下面的表达式程序efile3 =(efile2 + efile1)导致efile3在追加之前只获取efile2内容的内容。 efile2正确附加了efile1的内容。 为什么表达式无法给出预期结果?它与运算符优先级有关吗?

     #include<fstream>
     #include<string>
    class EasyFile{
        std::string fileContent;
        std::string temp1,temp;
        char* filePath;
        public:
            EasyFile(char* filePath){
               this->filePath = filePath;
               std::ifstream file(filePath);
               int count=0;
               while(file){
                   getline(file,temp1);
                   count++;
               }
               count--;
               std::ifstream file1(filePath);
               while(count!=0){
                    getline(file1,temp1);
                    temp = temp + temp1+"\n";
                    count--;
               }
               setFileContent(temp);
            }

            void setFileContent(std::string line){
                fileContent = line;

            }

            char* getFilePath(){
                return filePath;
            }

            std::string getFileContent(){
                return fileContent;
            }

            void setContent(std::string content){
                std::ofstream file(filePath);
                file<<content;
            }
            void operator=(EasyFile f);
            EasyFile operator+(EasyFile f);
    };
    void EasyFile::operator=(EasyFile f){
        this->setContent(f.getFileContent());
    }
    EasyFile EasyFile::operator+(EasyFile f){
        EasyFile f1(this->getFilePath());
        std::string totalContent = f1.getFileContent()+f.getFileContent();
        f1.setContent(totalContent);
        return f1;
    }

    int main(int argc,char** argv)
    {
        EasyFile efile1(argv[1]);
        EasyFile efile2(argv[2]);
        EasyFile efile3(argv[3]);
        efile3 =(efile2+efile1);
        return 0;
    }

1 个答案:

答案 0 :(得分:1)

我认为您并未将数据刷新到efile1,这就是为什么efile3只获得&#34; old&#34;内容。

编辑:您应在设置内容时更新fileContent

试试这个:

Run It Online !

// this method is called by `operator+()`
void setContent(std::string content){
    std::ofstream file(filePath);
    file << content;
    setFileContent(content);  // this should update `fileContent`
                              // which is read by `operator=()`
                              // when it calls `setContent(f.getFileContent())`
                              // thus actually updating the left-hand side of the operation
}