Объектно-ориентированное программирование на языке С++. Лясин Д.Н - 18 стр.

UptoLike

Составители: 

18
Необходимо отметить, что метод класса нельзя вызвать независимо от объ-
екта. Если рассмотреть, например, тело функции InitMas, то можно заметить, что
эта функция изменяет значения компонентных данных n и mas. Однако нигде
внутри тела метода не определяется, с компонентами какого именно объекта
должна работать функция. Очевидно, что в теле класса это
и невозможно опреде-
лить, поскольку данный метод будет обрабатывать компонентные данные различ-
ных объектов. Привязка метода класса к конкретному объекту осуществляется в
момент вызова метода. Компонентные функции при их вызове неявно получают
дополнительный аргумент - указатель на переменную объектного типа, для кото-
рой вызвана функция, и в теле функции можно обращаться ко
всем компонентам
объекта
. Так, например, для вызова m.InitMas(4) компонентная функция InitMas
будет работать с компонентами объекта m, а для вызова m1.InitMas(5)- с компо-
нентами объекта m1.
Память под объект можно выделять динамически, что иллюстрируется сле-
дующим примером:
//Листинг3. Обращение к компонентам класса при динамическом выделении памяти
//под объект
main()
{ array *ptm;
ptm=new array;
ptm->InitMas(4); //можно также (*ptm).InitMas(4)
ptm->ReadMas();
ptm->WriteMas();
prm->DelMas();
}
3.2. Конструкторы и деструкторы
Приведенный в листинге 1 пример класса-массива обладает рядом недос-
татков. В частности, возможна такая работа с объектом:
//Листинг 4.Пример неверного обращения к методам класса «массив целых чисел»
//из листинга 1
main()
{ array m;
     Необходимо отметить, что метод класса нельзя вызвать независимо от объ-
екта. Если рассмотреть, например, тело функции InitMas, то можно заметить, что
эта функция изменяет значения компонентных данных n и mas. Однако нигде
внутри тела метода не определяется, с компонентами какого именно объекта
должна работать функция. Очевидно, что в теле класса это и невозможно опреде-
лить, поскольку данный метод будет обрабатывать компонентные данные различ-
ных объектов. Привязка метода класса к конкретному объекту осуществляется в
момент вызова метода. Компонентные функции при их вызове неявно получают
дополнительный аргумент - указатель на переменную объектного типа, для кото-
рой вызвана функция, и в теле функции можно обращаться ко всем компонентам
объекта. Так, например, для вызова m.InitMas(4) компонентная функция InitMas
будет работать с компонентами объекта m, а для вызова m1.InitMas(5)- с компо-
нентами объекта m1.
     Память под объект можно выделять динамически, что иллюстрируется сле-
дующим примером:
     //Листинг3. Обращение к компонентам класса при динамическом выделении памяти
     //под объект
     main()
     { array *ptm;
       ptm=new array;
       ptm->InitMas(4); //можно также (*ptm).InitMas(4)
       ptm->ReadMas();
       ptm->WriteMas();
       prm->DelMas();
     }


3.2. Конструкторы и деструкторы


    Приведенный в листинге 1 пример класса-массива обладает рядом недос-
татков. В частности, возможна такая работа с объектом:
     //Листинг 4.Пример неверного обращения к методам класса «массив целых чисел»
     //из листинга 1
     main()
     { array m;
                                          18