Вам просто нужно решить, находится ли полигон внутри или снаружи симуляции. Если он должен быть вне его, то у вас есть параметр ссылочного конструктора. Если он внутри, вам понадобится следующий код:
class Simulation {
public:
Simulation() : poly(2.0) { }
Polygon *polygon() { return &poly; }
private:
Square poly;
};
Теперь, аспект полиморфизма, который вы можете легко сделать следующим образом:
class Simulation {
public:
Simulation() : poly(2.0), poly2(3.0) { }
Polygon *polygon(int i)
{
switch(i) {
case 0: return &poly;
case 1: return &poly2;
}
return 0;
}
private:
Square poly;
Cylinder poly2;
};
И как только вы устанете добавлять новые элементы данных, вот еще один прием, который исправит некоторые случаи:
class Simulation {
public:
Simulation() : poly(2.0) { }
Polygon *polygon(float x)
{
poly.edge_ = x;
return &poly;
}
private:
Square poly;
};
Изменить: Обратите внимание, что порядок классов в заголовочном файле должен быть тщательно продуман.