Four classes (Variable, Function, Factor_Expression, and Float) derive from the class Factor.Code:Term::Term(const Term& t) {
std::vector<Factor*> x = t.factors;
if (x.empty()) return;
Factor* f;
for (std::vector<Factor*>::iterator i = x.begin();i != x.end();++i) {
if ((*i)->who_am_i() == Factor::FLOATING) {
f = new Float(*((Float*)(*i)));
factors.push_back(f);
}
if ((*i)->who_am_i() == Factor::FACTOR_EXPRESSION) {
f = new Factor_Expression(*((Factor_Expression*)*i));
factors.push_back(f);
}
if ((*i)->who_am_i() == Factor::FUNCTION) {
f = new Function(*((Function*)*i));
factors.push_back(f);
}
if ((*i)->who_am_i() == Factor::VARIABLE) {
f = new Variable(*((Variable*)*i));
factors.push_back(f);
}
}
}
The goal of this constructor is to create new objects as you can see and put them into a vector array. I'm sure there's a simpler way to do this, something more OOP friendly, but I can't think of it.