The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

6.7 Инициализация

6.7 Инициализация

Предыдущая  Содержание  Следующая V*D*V

Обычно мы получаем описание класса отсылая new() к описанию метакласса. В случае Class и Object были бы следующие вызовы:

 

const void * Object = new(Class,

        "Object", Object, sizeof(struct Object),

        ctor, Object_ctor,

        dtor, Object_dtor,

        differ, Object_differ,

        puto, Object_puto,

        0);

 

const void * Class = new(Class,

        "Class", Object, sizeof(struct Class),

        ctor, Class_ctor,

        dtor, Class_dtor,

        0);

 

К сожалению, все вызовы полагаются на то, что другой уже были завершён. Таким образом, реализация Class и Object в Object.c требует статической инициализации описаний классов. Это единственная точка, где мы явно инициализируем struct Class:

 

static const struct Class object [] = {

    { { object + 1 },

        "Object", object, sizeof(struct Object),

        Object_ctor, Object_dtor, Object_differ, Object_puto

    },

    { { object + 1 },

        "Class", object, sizeof(struct Class),

        Class_ctor, Class_dtor, Object_differ, Object_puto

    }

};

 

const void * Object = object;

const void * Class = object + 1;

 

Имя массива является адресом первого элемента массива и уже может использоваться для инициализации компонентов элементов. Мы полностью расставили скобки этой инициализации на случай изменения struct Object позже.

 

Предыдущая  Содержание  Следующая