class Child
{
public:
Child()
{
Serial1.println("Child()");
};
Child(size_t i)
: m_i {i}
{
print(true, "()");
};
void print(bool ln = false, char sep[2] = "[]")
{
Serial1.print("Child");
Serial1.print(sep[0]);
Serial1.print(m_i);
Serial1.print('=');
Serial1.print(m_value);
Serial1.print(sep[1]);
if (ln) Serial1.println();
};
void vset(size_t val)
{
m_value = val;
};
private:
size_t m_i;
size_t m_value = 0;
};
class Parent
{
public:
Parent()
{
Serial1.println("Parent()");
};
Parent(size_t i1, size_t i2, size_t p)
: m_childs { Child(i1)
, Child(i2)
}
, m_p {p}
{
print(true, "()");
};
void print(bool ln = false, char sep[2] = "[]")
{
Serial1.print("Parent");
Serial1.print(sep[0]);
Serial1.println(m_p);
Serial1.print(", ");
m_childs[0].print();
Serial1.print(", ");
m_childs[1].print();
Serial1.println(sep[1]);
if (ln) Serial1.println();
};
void vset(size_t m_value)
{
m_childs[0].vset(m_value);
}
private:
Child m_childs[2];
size_t m_p;
};
class RefParent
{
public:
RefParent()
{
Serial1.println("RefParent()");
};
RefParent(Parent* parent, size_t child, size_t index)
: m_child {Child(child)}
, m_index {index}
, m_parent {parent}
{
print(true, "()");
};
void print(bool ln = false, char sep[2] = "[]")
{
Serial1.print("RefParent");
Serial1.print(sep[0]);
Serial1.println(m_index);
Serial1.print(" - ");
m_child.print();
Serial1.print(" - ");
m_parent->print();
Serial1.print(sep[1]);
if (ln) Serial1.println();
};
void vset(size_t val)
{
m_parent->vset(val);
};
private:
size_t m_index;
Child m_child;
Parent* m_parent;
};
void setup() {
// put your setup code here, to run once:
Serial1.begin(115200);
Serial1.println("Setup");
Parent parent(0,1,2);
RefParent ref1(&parent, 3, 4);
RefParent ref2(&parent, 5, 6);
ref1.vset(9);
parent.print(true);
ref1.print(true);
ref2.print(true);
}
void loop() {
// put your main code here, to run repeatedly:
delay(1); // this speeds up the simulation
}