0
class Parent;
class Child;

Parent *parent;

ifstream inf("file.csv");
inf >> *parent;

//in parent class
friend istream& operator>> (istream &is, Parent &parent) {
  return parent.read(is);
}

virtual istream& read(istream &is){
  char temp[80];
  is >> temp;
  // then break temp into strings and assign them to values
  return is;
}

//virtual istream& read

最初の 2 つの値のみを読み取り、Parent クラスに割り当てます。ChildクラスにはParent独自のクラス値 + 3 があります。

親の関数を呼び出してread()から子の関数を呼び出して、親のread()関数がファイルの最初の 2 つのフィールドを読み取り、子が次の 3 つのフィールドを読み取るようにするにはどうすればよいですか?

構文の問題であることはわかっています。その方法がわかりません。子の読み取りクラス内で呼び出してParent::read(is)みましたが、子のread();の前に呼び出してみました。私は試しread(is) >> tempましたが、どれもうまくいきませんでした。そしてを呼び出すParent::read(is)is >> temp、親isはファイルの 5 つの値すべてを返します。

4

1 に答える 1

1

この種の状況では、通常、子readに親の関数をオーバーライドさせます。これにより、派生クラスは、独自のロジックを適用する前に、親の元の関数を呼び出すことができます。

class Parent
{
public:
    virtual void read(istream &s)
    {
        s >> value1;
        s >> value2;
    }
};

class Child : public Parent
{
public:
    virtual void read(istream &s)
    {
        Parent::read(s);  // Read the values for the parent

        // Read in the 3 values for Child
        s >> value3;
        s >> value4;
        s >> value5;
    }
};

読み取り操作を実行するには」

// Instantiate an instance of the derived class
Parent *parent(new Child);

// Call the read function. This will call Child::read() which in turn will
// call Parent::read() 
parent->read(instream);
于 2012-06-05T21:22:08.340 に答える