从istream获取ifstream并通过重载>>调用函数操作者

时间:2013-05-07 02:00:25

标签: function operator-overloading overloading ifstream istream

我创建了一个对象PDBParser,用于从PDB文件中提取信息。现在我试图重载>>和<<运算符,以便我可以从主要使用它们:

inFile >> MyPDBParser;
outfile << MyPDBParser;

我得到了&lt;&lt;运算符全部设置,但我似乎无法得到&gt;&gt;操作员工作正常。

这是PDBParser类的.h文件,可以让您更好地了解正在发生的事情:

#include <iostream>
#include <cstdlib>
#include "FloatArray.h"
#include "IntArray.h"
#include "Atom.h"
#include "AtomArray.h"

using namespace std;

class PDBParser
{
friend ostream& operator<<(ostream& _ostream, PDBParser &rhs);
friend istream& operator>>(istream& _istream, PDBParser &rhs);


public:
    PDBParser();
    PDBParser(string atom1, string atom2, int separation);
    PDBParser(const PDBParser& orig);
    virtual ~PDBParser();

    void grabAtoms(ifstream &infile);
    void findAtoms();

    void setAtom1(string rhs);
    void setAtom2(string rhs);
    void setSeparation(int rhs);

    string getAtom1();
    string getAtom2();
    int getSeparation();



private:
    string atom1s;
    string atom2s;
    int separation;

    AtomArray *atoms1;
    AtomArray *atoms2;
    AtomArray *matches1;
    AtomArray *matches2;


    FloatArray *x1;
    FloatArray *y1;
    FloatArray *z1;
    FloatArray *x2;
    FloatArray *y2;
    FloatArray *z2;

    IntArray *allsequence;


    ifstream backupinfile;


    void trim(string &rhs);
    void incrementArrays(int newElements);


};

基本上我需要&gt;&gt;要执行的操作是从istream获取infile,然后为此PDBParser对象实例调用grabAtoms(infile)和findAtoms()函数。

这就是我现在所拥有的,但这不起作用。请原谅评论的行,因为它们是我试图创作的东西。我尝试将backupinfile对象添加到PDBParser类只是为了使事情正常工作,所以通常它没有这个并且不使用它。

istream & operator>>(istream & _istream, PDBParser &rhs)
{
//      ifstream in;

//      _istream >> rhs.grabAtoms(in) >> rhs.findAtoms();

    _istream >> rhs.backupinfile;

    rhs.grabAtoms(rhs.backupinfile);
    rhs.findAtoms();

    return _istream;
}

我已经确定这里的问题是我的函数需要接收一个ifstream对象而我无法弄清楚如何从istream对象中获取它。

这是我的工作&lt;&lt;只是为了它的重载:

ostream & operator<<(ostream & _ostream, PDBParser &rhs)
{
    for(int i=0; i < rhs.x1->getSize(); i++)
        {
            _ostream.precision(3);
            _ostream << fixed;
            _ostream << setprecision (3) << rhs.x1->get(i) << " ";
            _ostream << setprecision (3) << rhs.y1->get(i) << " ";
            _ostream << setprecision (3) << rhs.z1->get(i) << " ";
            _ostream << setprecision (3) << rhs.x2->get(i) << " ";
            _ostream << setprecision (3) << rhs.y2->get(i) << " ";
            _ostream << setprecision (3) << rhs.z2->get(i) << endl;
                    }
    return _ostream;
}

由于

0 个答案:

没有答案