如何在流操作符重载函数中使用cust或指针?

时间:2012-03-25 05:17:07

标签: c++ overloading

我有父母和子女课程。它们都超载>>运营商。我需要从文件(或屏幕)读取父对象,然后将其强制转换为子对象(或使用指针)。 现在我正在使用套装和获取。

ifstream& operator>>(ifstream& ifs, Child& ch)
{
    Parent p;       
    ifs >> ch.field >> p;
    ch.setCh(p);
    return(ifs);
}

void Ch::setCh(Parent pIn){setField1(pIn.getField1());}

1 个答案:

答案 0 :(得分:0)

在此示例中可以看到一种可能的解决方案:

#include <iostream>
using namespace std;

class A {
 public:
  int val;
  friend istream& operator>>(istream& in, A& a);
};

istream& operator>>(istream& in, A& a) {
 cout << "Calling a::>>\n";
 in >> a.val;
 return in;
}

class B : public A {
 public:
  int val2;
  friend istream& operator>>(istream& in, B& b);
};

istream& operator>>(istream& in, B& b) {
  cout << "Calling b::>>\n";
  in >> static_cast<A&>(b);
  in >> b.val2;
  return in;
}
int main(int argc, char** argv) {
  B b;
  cin >> b;
  cout << b.val << " " << b.val2 << endl;
  return 0;
}