#include <iostream>
#include <string>
int *new_int(int val) {
return new int(val);
}
struct baz
{
int h;
int k;
baz(int a, int b) : h(a), k(b) {}
};
struct bar
{
int i;
int* i_ptr;
baz b;
baz& b_ref;
bar(int x) : i(x),i_ptr(new int(x+1)),b(i+3,i+5),b_ref(b) {}
};
struct foo
{
int a;
int* a_ptr;
bar b;
foo(int x) : a(x),
a_ptr(new_int(x+1)),
b(2*x) {}
};
foo *new_foo(int x) {
return new foo(x);
}
int main(int argc, char** argv)
{
foo foo1(12);
foo foo2(121);
foo * newd_foo = new_foo(1);
delete newd_foo;
foo2.a = 7777; // Stop here
*(foo2.b.i_ptr) = 8888;
foo2.b.b.h = 9999;
*(foo1.a_ptr) = 9999;
foo1.b.i = 9999;
int numbers[5] = {1,2,3,4,5};
return 0; // Done initializing
}