}
comp (const comp& x)
{
Re=x.Re;
Im=x.Im;
};
void main( )
{
comp x(1,2), y(-Ø.5,1.25);
compz=x; //Вызывается конструктор копии
compv,w; //Вызывается "пустой" конструктор
v=w=y; //Вызывается operator=( )
}
Рассмотрим более детально, как реализуется последовательное присваивание v=w=y;
По знаку присваивания <=> вызывается функция-элемент operator=( ). Объект у является фактически параметром, которым инициализируется ссылка
constcomp &src в функции operator=( ).
Адрес объекта w заносится в указатель this функции-элемента операции присваивания. Таким образом, после окончания присваивания по return*this будут получены значения w.Re=- Ø.5;w.Im=1.25.
После этого снова вызывается operator=( ). В качестве фактического параметра передается w, а адрес объекта v заносится в указатель this и т. д.
Именно return*this, возвращающий ссылку, отличает operator=( ) от конструктора копии.
ВНИМАНИЕ! Если необходимо закрепить присваивание, нужно явно определить operator=( ) и поместить его в область действия метки доступа private.
Это дополнение к конструктору. Он имеет то же имя, что и класс, но с префиксом-тильдой (~). Вызывается всякий раз, когда уничтожается объект данного класса. Заголовок деструктора имеет вид
~имя_класса( )
Для деструктора существуют следующие правила:
Если деструктор явно не определен, он создается компилятором по умолчанию.
Деструктор вызывается по умолчанию:
Если нужно разрушить отдельный объект, можно вызвать деструктор явно имя_объекта. ~ имя_класса ( );
Например, s. ~tree( );Разрушен объектs классаtree.
this- > ~tree( );Явное разрушение объекта класса tree, адрес которого находится в указателе tris.
Для встроенных типов (int, long, char и др.) имеется возможность явного преобразования типа. Необходимость такого преобразования может возникать и для объектов того или иного класса. Объекты класса могут быть преобразованы к другому типу или с помощью конструкторов преобразования , или специальной операции приведения.
Если конструктор класса А воспринимает единственный аргумент типа В, то говорят, что В может быть приведен к А с помощью преобразования конструктором. Другими словами, компилятор может использовать конструктор класса А с аргументом типа В,чтобы получить А из В. Сказанное рассмотрим на примере комплексных чисел.
Пример.
class comp
{
float Re, Jm;
public:
comp (float a, float b)
{
Re = a;
Jm = b;
}
comp ( float a )
{
Re = a;
Jm = Ø;
}
comp ( )
{
}
};
void main ( )
{
float r = 96;
comp a(2, -2), b = r;
compc;
c = b;
}
При создании объекта а вызывается конструктор с двумя параметрами.
В результатеa. Re = 2
a.Jm = -2.
Затем вызывается конструктор с одним параметром. Создается объект b c элементами данныхb. Re = 96
b.Jm = Ø.
Из объекта r типа float с помощью конструктора создан объект класса comp.
При создании объекта c вызывается "пустой" конструктор. Далее в результате присваивания будет получено
с.Re = 96
с.Jm = Ø.
Это функции-элементы класса, которые осуществляют явное преобразование типа класса к другому типу. Они имеют следующий вид:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.