Turbo Assembler 3.0. Руководство пользователя

         

Описание процедур методов для объектов


При создании процедур методов для объектов применяются неко- торые специальные соглашения. Процедуры методов объектов должны иметь возможность должны иметь возможность доступа к объекту, с которым они работают. Таким образом, в качестве параметра проце- дуры должен использоваться указатель на объект.

Турбо Ассемблер интерпретирует объекты достаточно гибко и позволяет использовать для передачи аргументов процедурам методов разнообразные соглашения. Эти соглашения ограничиваются только необходимостью взаимодействовать с объектами, создаваемыми на языке высокого уровня.

Если вы пишете процедуру метода объекта на самом языке Ас- семблера, то может оказаться полезным использование соглашения, по которому аргументы передаются через регистры. В этом случае вам следует написать процедуру метода, воспринимающую указатель на объект в регистре или паре регистров ES:DI).

Если вы пишете процедуру метода, которая использует соглаше- ния по интерфейсу языка высокого уровня, то процедура должна воспринимать указатель объекта в одном из аргументов. Указатель объекта, передаваемый из объектно-ориентированных языков высокого уровня (таких как С++), представляет собой неявный аргумент, по- мещаемый в начало списка аргументов. Процедура метода, написанная на языке Ассемблера, должна явно включать в список аргументов указатель объекта. В противном случае вы можете получить непред- виденные результаты. Нужно помнить, что в зависимости от того, является ли объект ближним (NEAR) или дальним (FAR), указатель может быть величиной WORD или DWORD.

Когда вы пишете на языке Ассемблера конструктор или деструк- тор, могут возникнуть другие сложности. Чтобы указать, что конс- труктор или деструктор должен выполнять определенные действия, С++ использует (при некоторых обстоятельствах) использует другие неявные аргументы.

Примечание: Об используемых в С++ соглашениях по вызо- ву рассказывается в Главе 18.

Конструкторам, написанным на языке Ассемблера, не обязатель- но требуется передавать указатель на объект. Если объект никогда не распределяется статически, то конструктор объекта всегда будет выделять для объекта память из динамически распределяемой облас- ти.

Назад | Содержание | Вперед



Содержание раздела