我正在尝试对运行文件的自定义类重载运算符'+'和'='。 运算符'+'重载将右操作数文件的内容附加到左操作数文件。 运算符'='重载将右操作数文件的内容写入左操作数文件。 运算符可以独立地重载工作,但是当在表达式中组合时,它们不会给出预期的结果。 使用下面的表达式程序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;
}
答案 0 :(得分:1)
我认为您并未将数据刷新到efile1
,这就是为什么efile3
只获得&#34; old&#34;内容。击>
编辑:您应在设置内容时更新fileContent
:
试试这个:
// 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
}