Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> конструктор копирования, как реализовать 
:(
    Опции темы
JUmPER
Дата 20.11.2006, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 22.8.2006

Репутация: 1
Всего: 3



не нашёл такого в мсдн (вроде как такого в vb6 нет)
у кого-нибудь есть светлые идеи, как это реализовать средствами языка?
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
Naghual
Дата 20.11.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Светлые идею появятся сразу, как только будет ясно что такое конструктор копирования.
Ты просвети нас.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
JUmPER
Дата 20.11.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 22.8.2006

Репутация: 1
Всего: 3



в C++ есть такое понятие как "конструктор копирования"
Цитата

Работа конструктора копий (copy constructor) заключается в предоставлении возможности инициализации (создания) нового объекта из уже существующего

т.е. при присваивании объекту А объекта Б копируется не ссылка а копия объекта Б (причём создаётся эта копия автоматически)
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
Naghual
Дата 20.11.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Ну мы С++ не изучали...

Если говорить о рантайм, то посмотри инструкции ByVal и ByRef.
Если времени разработки - то я не понял вопроса.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
JUmPER
Дата 20.11.2006, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 22.8.2006

Репутация: 1
Всего: 3



рантайм

пример использования:
Код

dim a as my_class
dim b as my_class

' тут инициализируем объект "a"
' ...

' копируем: тут должен неявно вызываться конструктор копирования для класса "my_class"
set b=a

' тут "b" и "a" ссылки не на один объект а на разные
' ...

--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
Naghual
Дата 20.11.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Мда... 
Интересный вопрос. Будем думать.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Naghual
Дата 20.11.2006, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Подумал я пришел к выводу что стандартными и известными мне нестандартными способами этого не решить.

Вопрос:  ты работаеш с самописными классами? т.е. нужно создать копию своего класса?

Со своим классом решение есть.
С чужим - только ручками.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
JUmPER
Дата 20.11.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 22.8.2006

Репутация: 1
Всего: 3



Цитата(Naghual @  20.11.2006,  15:16 Найти цитируемый пост)
Со своим классом решение есть.

со своим, я про это же и спрашиваю smile 
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
Naghual
Дата 20.11.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Решение опять-же Ручками, но случай тут частный, так как известна вся подноготная класса.

Создай в классе функцию создания копии.
Ну например так:
Код

Public Function Clone() as my_class
    dim NewClass as my_class

    set NewClass = New
    NewClass.X = pvar_X
    NewClass.Y = pvar_Y
    ...
    set Clone = NewClass
End Function



--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
JUmPER
Дата 20.11.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 22.8.2006

Репутация: 1
Всего: 3



я же спрашиваю про неявное копирование, явное - ясное дело - очевидно...
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
Naghual
Дата 20.11.2006, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Да я понимаю.
Но с неявным копированием напряг.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Voldemar2004
Дата 20.11.2006, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Имхо конструктор копирования применяется, когда мы создаем свой собственный объект (а в ВБ все объекты уже готовы - все остается только на совести разработчиков), одним из полей которого является указатель на тип. Если не создать КК, будет утечка памяти, если нет КК компилятор сам его создаст, но тоже будет утечка памяти.

Оффтоп: долго не мог понять по названию темы: я в С++ или в...


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
JUmPER
Дата 21.11.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 22.8.2006

Репутация: 1
Всего: 3



родил-таки я =)
правда кривовато, но бейсик лучше это сделать не даёт

сам класс:
Код

Option Explicit

Private my_name As String

' делаем его св-вом по умолчанию
Public Property Let self(ByRef new_me As CTest)
    Call Me.init(new_me.Name)
End Property

' инициализатор
Public Sub init(aName As String)
    my_name = aName
End Sub

' доступ тестовому к полю
Public Property Get Name() As String
    Name = my_name
End Property

Public Property Let Name(aNewName As String)
    my_name = aNewName
End Property


демострация
Код

' экземпляр должен быть создан
Dim t1 As New CTest
Dim t2 As New CTest

Call t2.init("t2")

' используем let, а не set
' т.к. при использовании set бейсик, по ходу, не смотрит на свойства по умолчанию =(
t1 = t2
t1.Name = "t1=)"

Call MsgBox(t1.Name & " " & t2.Name)

--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
Naghual
Дата 21.11.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



JUmPER, это не есть решение. Это но копирование класса. Это задание одного единственного свойства по умолчанию в момент инициализации.

Это совсем не то о чем вы спрашивали.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
JUmPER
Дата 21.11.2006, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 22.8.2006

Репутация: 1
Всего: 3



наоборот, это и есть неявное создание нового экземпляра класса при копировании, что собственно и требовалось
т.е. после присвоения существуют два независимых экземпляра
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0746 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.