Указывает оператор присваивания, при перегрузке
Оператора = (Присваивание)
Синтаксис
Использование
lhs = rhs
Параметры
typename
lhs
Переменная, чтобы присвоить.
rhs
Значение для присваивания.
Описание
Let используется для перегрузки
Оператора = (Присваивание) и чтобы
отличить его от оператора сравнения
Оператор = (Равно).
lhs = rhs присвоит
rhs в
lhs
, ссылаясь на процедуру оператора
Let определенную
typename.
Оператор
Let (присваивание) должен быть определен, если
неполная неявная копия не является достаточной. Это происходит в тех
случаях, когда объект управляет динамически выделяемой памятью или другими
ресурсами, которые должны быть специально скопированы (например, если
указатель-элемент укажет на динамически-выделенную память, то неявный
оператор присваивания просто скопирует значение указателя , вместо выделения
памяти , а затем выполнит копию данных).
Примечание: Можно с уверенностью сделать проверку для
самостоятельного присваивания в верхней части тела Let (Сравнивая
адрес неявного экземпляра 'this' с адресом параметра 'rhs') чтобы избежать
разрушения объекта, если ранее выделенная память сначала освобождается
(см. пример ниже).
Пример
Type UDT
Public:
Declare Constructor (ByVal zp As Const ZString Ptr) ''Конструктор
со строковым инициализатором
Declare Operator Let (ByRef rhs As UDT) ''Оператор Let (присваивание)
Declare Function getString () As String ''Функция
для получения строки
Declare Destructor () ''Деструктор
Private:
Dim zp As ZString Ptr ''private
указатель, чтобы избежать прямого доступа
End Type
Constructor UDT (ByVal zp As Const ZString Ptr)
This.zp = CAllocate(Len(*zp) + 1)
*This.zp = *zp
End Constructor
Operator UDT.Let (ByRef rhs As UDT)
If @This <> @rhs Then '' проверить
для того, чтобы избежать разрушения объекта
Deallocate(This.zp)
This.zp = CAllocate(Len(*rhs.zp) + 1)
*This.zp = *rhs.zp
End If
End Operator
Function UDT.getString () As String
Return *This.zp
End Function
Destructor UDT ()
Deallocate(This.zp)
End Destructor
Dim u As UDT = UDT("")
u = Type<UDT>("Thanks to the overloading operator Let (assign)")
Print u.getString
Sleep
Вывод:
Thanks to the overloading operator Let (assign)
Различия диалектов
Отличия от QB
См. также