親のread()
関数を使用して姓名を読み取り、子のread()
読み取り専用をミドルネームにすることはできますか? または、子供の最初、2番目、および中間を読む必要がありますか?
編集:最初の答えは機能しているようですが、を使用して子を読み取るとstrtok
、3番目のフィールドだけでなく、行全体が取得されます。それを回避する方法はありますか、それとも最初の 2 つのフィールドをダミー変数に読み込んでから、3 番目のフィールドを読み込む必要がありますか?
class Parent
{
protected:
char first[80], last[80];
virtual istream& read(istream &is) {
char temp[80];
char *f, *l;
is >> temp;
f = strtok(temp, ",");
strcpy(first, f);
l = strtok(NULL, ",");
strcpy(last, l);
return is;
}
public:
friend istream& operator>> (istream &is, Parent &parent) {
return parent.read(is);
}
};
class Child: public Parent
{
char middle[80];
istream& read(istream &is) {
/*inherit first and last from parent*/
char temp[80];
char *m;
is >> temp;
m = strtok(temp, ",");
strcpy(middle, m);
}
};
in main()
Parent *object;
ifstream inf("filename.csv");
object = new Child();
inf >> *object;
猫ファイル名.csv
George,Bush,Walker