将自己的功能添加到ifstream

时间:2017-08-08 11:05:06

标签: c++ c++11 std fstream

我想让我自己的类在任何情况下都与ifstream完全一样,但我可以很容易地获得文件的大小。

这里是标题:

#include <fstream>

using namespace std;

class ifile: public ifstream {

    size_t _file_size = 0;
    size_t calculate_file_size();
public:
    ifile(): ifstream(), _file_size(0) {}
    ifile(const char *filename, ios_base::open_mode mode = ios_base::in):
        ifstream(filename, mode)
    {
        _file_size = cal_file_size();
    }
    size_t get_file_size();
    virtual ~ifile();
};

我发现了许多我不应该从ifstream继承的信息。那么我怎么能轻松解决我的问题呢?

编辑:

calculate_file_size:

size_t ifile::calculate_file_size()
{
    auto present_pos = tellg();
    seekg(0, ifstream::end);
    auto file_size = tellg();
    seekg(present_pos);
    return file_size;
}
  1. 很高兴看到正确的例子(如果我可以继承ifstream)。
  2. 原因是计算一次并多次阅读。
  3. 为什么不get_file_size(ifstream &ifs)?我的ifstream obj是静态的,因此它被计算了很多次。

1 个答案:

答案 0 :(得分:0)

ifstream继承添加新方法是完全没问题的,这里有一个code sample,在任何平台上都没有让我失望。但是据我所知,std类通常没有虚拟析构函数,在处理派生对象时需要注意这些。因此,从中获取会产生犯错的新可能性。