我正在尝试从看起来像的文件中加载 A 和 B 对象
A 3 4
B 2 4 5
B 3 5 6
A 2 3
我有以下类,Base,A 和 B,Base 的子类。每个都带有 operator>> 重载。
问题出在函数 load() 中。我不确定如何实例化对象。我的 load() 无法编译,因为‘pO’ was not declared in this scope
. 我该如何解决?或者实现这一目标的最佳方法是什么?
另外,如果我设法让它以某种方式工作,我需要手动删除对象吗?
class Base
{
public:
Base() {}
Base(int tot_) : tot(tot_) {}
void print() const {
std::cout << "Tot : " << tot << std::endl;
}
private:
int tot;
};
class A : public Base
{
public:
A() : Base(0) {}
A(int a1, int a2) : Base(a1+a2) {}
};
class B : public Base
{
public:
B() : Base(1) {}
B(int b1, int b2, int b3) : Base(b1+b2+b3){}
};
std::istream& operator>>(std::istream& in, A& a)
{
int a1, a2;
in >> a1;
in >> a2;
a = A(a1,a2);
return in;
}
std::istream& operator>>(std::istream& in, B& b)
{
int b1, b2, b3;
in >> b1;
in >> b2;
in >> b3;
b = B(b1,b2,b3);
return in;
}
bool load(const std::string& s, std::vector<Base*>& objs)
{
std::ifstream is(s.c_str());
if (is.good())
{
std::string obj;
while (!is.eof())
{
is >> obj;
if (obj == "A") {
A *pO = new A;
}
else (obj == "B") {
B *pO = new B;
}
is >> *pO;
objs.push_back(pO);
}
is.close();
return true;
}
return false;
}