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