Property let или не property let

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Shurick
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 15.10.2005 (Сб) 20:51

Property let или не property let

Сообщение Shurick » 21.10.2005 (Пт) 22:19

Подскажите, можно ли в VB написАть оператор property let в стиле сишного operator:= ? В смысле как написАть оператор присваивания содержимого экземпляров класса (классов)?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 21.10.2005 (Пт) 22:25

Set Object = ...

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 21.10.2005 (Пт) 23:10

Радует ударение на букву "А" в слове "написать" :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 21.10.2005 (Пт) 23:20

BVНу так иначе мы бы обязательно неправильно бы прочитали :)
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

Shurick
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 15.10.2005 (Сб) 20:51

Сообщение Shurick » 22.10.2005 (Сб) 9:31

Господа, не отвлекайтесь от темы :-)
На самом деле я что-то не до конца понимаю. Судя по документации, Set Object = ... присваивает указатель, а не производит копирование содержимого экземпляра класса.
Чтобы было понятнее, напишу пару кусков кода:

MyClass1 class module:
option explicit
private m_iLength as integer
private m_iWidth as integer

public property get Length() as integet
Length = m_iLength
end property

public property let Length(a_iNew as integer)
m_iLength = a_iNew
end property

public property get Width() as integer
Width = m_iWidth
end property

public property let Width(a_iNew as integer)
m_Width = a_iNew
end property

Далее использование класса:

dim Person1 as MyClass1
dim Person2 as MyClass1
set Person1 = new MyClass1
set Person2 = new MyClass1

Person1.Length = 20
Person1.Width = 10

Person2 = Person1

Так вот, я хочу, чтобы в результате выполнения последней строчки экземпляру Person2 класса MyClass1 было присвоено содержимое экземпляра Person1 этого же класса. Причем очевидно, что способ присвоения должен регламентироваться в самОм классе MyClass1, потому что простое копирование куска памяти, соответствующей экземпляру, не всегда будет корректным. Т.е. фактически я хочу, чтобы для Person1 выполнился подобный метод (в простейшем случае):

sub Copy(a_New as MyClass1)
Length = a_New.Length
Width = a_New.Width
end sub

Или в более сложном случае (если присваиваем экземпляр другого класса):

sub Copy(a_New as MyClass2)
Length = ....
Width = ....
end sub

А при Set Person1 = Person2, я так понимаю, у меня просто будет еще один указатель на Person1, и экземпляр Person2 будет уничтожен? Или Set Person2 = Person1 выполняет копирование содержимого памяти? Но тогда это некорректно, если класс содержит еще какие-нибудь хитрые указатели.
В C++ такой метод класса называется operator:=, и он позволяет определять механизмы присвоения экземпляров данного класса или других классов. Есть в VB что-то подобное?

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 22.10.2005 (Сб) 9:49

насколько я помню нет, надо копировать каждое отдельно
Состояний же любви — десять: любовный взгляд, привязанность в мыслях, рождение желания, бессонница, исхудание, отвращение к предметам восприятия, утрата стыда, безумие, потеря сознания и смерть — вот их признаки

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.10.2005 (Сб) 9:53

Shurick, 1) определи в MyClass1
Property Let Copy(ByVal RHS As MyClass1)
2) задай её как свойство по умолчанию (Tools -> Procedure Attributes -> Advanced -> Procedure ID)

После этого начнёт работать "присвоение" объектов простым равенством.

Если ты задаёшь механизм копирования объекта из типа MyClass2, то соответственно RHS надо объявить как MyClass2
Изображение

Shurick
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 15.10.2005 (Сб) 20:51

Сообщение Shurick » 22.10.2005 (Сб) 11:08

Вроде понял.
Только не знаю, где этот "Tools -> Procedure Attributes -> Advanced -> Procedure ID" находится в VBA для Excel. Может подскажете?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.10.2005 (Сб) 11:14

В VBA этой функциональности, похоже, нет.
Изображение

Shurick
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 15.10.2005 (Сб) 20:51

Сообщение Shurick » 22.10.2005 (Сб) 11:24

Жалко, блин...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, SemrushBot и гости: 138

    TopList