使用帮助器类接口写入文件,我在哪里打开ofstream? |
您所在的位置:网站首页 › 腾讯微云在哪里打开文件 › 使用帮助器类接口写入文件,我在哪里打开ofstream? |
让你很难回答你的问题的是,真正的问题在其他地方: FileIO是Account类的复合成员数据对象。 为了正确的separation of responsibilities,FileIO不应该是Account的成员。 相反,它应该是一个单独的类。使用这种SOLID-type设计,打开ofstream的问题很容易解决,因为这可以在例如构造函数中完成: class FileIO { private: ofstream _accoFile; public: FileIO(const std::string& filename) : _accoFile(filename) {}; void WriteData(Account*); };使用此设计: 一旦创建FileIO;Several实例,输出文件就会打开。可以将Account的实例序列化为相同的输出文件; FileIO实例一旦销毁,输出文件就会自动关闭。下面是一个简单的main,演示了如何使用这样的序列化程序: int main() { std::vector accountsVec; FileIO writer("accInfo.txt"); for (int i = 0; i < accountsVec.size(); i++) { writer.WriteData(accountsVec[i]); } return 0; }更新 我知道赋值要求所有Account实例都有一个通用的成员序列化程序。这真的很奇怪,所以可能值得再检查一遍。在任何情况下,基于这些奇怪的要求,以下是我能想到的。 序列化程序可以使用典型的I/O open和close方法进行设计: class FileIO { private: ofstream _accoFile; public: void open(const string& filename) { _accoFile.open(filename); } void close() { _accoFile.close(); } void WriteData(Account*); };由于序列化程序是Account的复合成员,因此应将其集成到Account ctor中: Account::Account(Person* accOwner,int accNumber,double accBalance,FileIO* iFile) : _accOwner(accOwner), _accNumber(accNumber), _accBalance(accBalance), _iFile(iFile) {}如果Account被赋予了将自身保存到目标文件中的责任,那么最好编写一个实现该责任的Account方法: void Account::WriteData() { _iFile->WriteData(this); }以下是基于此设计的main示例: int main() { FileIO fileio; Person person1{"toto","Paris"}; Person person2{"tutu","London"}; Person person3{"tata","Lisboa"}; vector accountsVec; accountsVec.emplace_back( &person1 , 1, 12., &fileio ); accountsVec.emplace_back( &person2 , 2, 100., &fileio ); accountsVec.emplace_back( &person3 , 3, 1000., &fileio ); fileio.open("accInfo.txt"); for (int i = 0; i < accountsVec.size(); i++) { accountsVec[i].WriteData(); } fileio.close(); } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |