С++ для начинающих



         

Типы классов - часть 5


}

Имя конструктора совпадает с именем класса. Считается, что он не возвращает значение, поэтому не нужно задавать возвращаемое значение ни в его определении, ни в его теле. Конструкторов может быть несколько. Как и любая другая функция, они могут быть объявлены встроенными.

#include <cstring>

// default constructor

inline String::String()

{

    _size = 0;

    _string = 0;

}

inline String::String( const char *str )

{

    if ( ! str ) {

        _size = 0; _string = 0;

    }

    else {

        _size = str1en( str );

        _string = new char[ _size + 1 ];

        strcpy( _string, str );

    }

// copy constructor

inline String::String( const    String &rhs   )

{

    size = rhs._size;

    if ( ! rhs._string   )

        _string = 0;

    else {

        _string = new char[ _size + 1 ];

        strcpy( _string, rhs._string );

   }

}

Поскольку мы динамически выделяли память с помощью оператора new, необходимо освободить ее вызовом delete, когда объект String нам больше не нужен. Для этой цели служит еще одна специальная функция-член – деструктор, автоматически вызываемый для объекта в тот момент, когда этот объект перестает существовать. (См. главу 7 о времени жизни объекта.) Имя деструктора образовано из символа тильды (~) и имени класса. Вот определение деструктора класса String. Именно в нем мы вызываем операцию delete, чтобы освободить память, выделенную в конструкторе:

inline String: :~String() { delete [] _string; }

В обоих перегруженных операторах присваивания используется специальное ключевое слово this.

Когда мы пишем:

String namel( "orville" ), name2( "wilbur" );

namel = "Orville Wright";

this является указателем, адресующим объект name1 внутри тела функции операции присваивания.

this всегда указывает на объект класса, через который происходит вызов функции. Если

ptr->size();

obj[ 1024 ];

то внутри size() значением this будет адрес, хранящийся в ptr. Внутри операции взятия индекса this содержит адрес obj. Разыменовывая this (использованием *this), мы получаем сам объект. (Указатель this детально описан в разделе 13.4.)




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