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

Поиск:

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


Эксперт
***


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

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



Новый экземпляр класса у тебя есть еще на стадии обьявления переменных.
Код
Dim t1 As New CTest
Dim t2 As New CTest



Идея твоего вопроса заключалась в следующем.

Создавался Класс1. Его свойства были заданы.
На его основе создается Класс 2. На этом этапе, значения свойств класса 2 идентичны значениям класса 1.
Экземпляры не связаны. Тоесть при изменении значения свойства в классе 1, значение в классе 2 не изменяется.

Вот это и есть то, что в С++ называется конструктор копирования.

Это сообщение отредактировал(а) Naghual - 21.11.2006, 11:59


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


Бывалый
*


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

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



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


Эксперт
***


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

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



нет. не происходит.
добавь в класс любое свойство и проверь.


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


Бывалый
*


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

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



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


Эксперт
***


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

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



Name ты переназначаеш при операции присвоения. Оно не показательно, так-как самозаполняется при инициализации. Оно не копируется из первого класса.

Серьезно. Добавь классу еще одно свойство и проверь.

Это сообщение отредактировал(а) Naghual - 21.11.2006, 12:17


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


Бывалый
*


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

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



тут дело не в "самокопировании", а именно в создании копии при присвоении
а то, что это полностью реализуется руками разработчика класса -- так это из-за самого бейсика smile 

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


Эксперт
***


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

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



Цитата(JUmPER @  21.11.2006,  12:21 Найти цитируемый пост)
а в "Let" можно задать и остальные поля


Тогда я вообще не вижу смысла в данной теме, так как на лицо явное копирование значений!


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


Бывалый
*


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

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



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


Эксперт
***


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

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



Цитата(JUmPER @  21.11.2006,  12:27 Найти цитируемый пост)
явное копирование внутри класса, а снаружи это выглядит как конструктор копирования

Ок. Покажи пример на своем же примере.



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


Бывалый
*


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

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



Код

Dim t1 As New CTest
Dim t2 As New CTest

Call t2.init("t2")

' снаружи это выглядит как простое копирование
t1 = t2

' тут мы имеем два одинаковых экземпляра, а не две ссылки на один
' с одинаковыми значениями полей. смотрим:
Call MsgBox(t1.Name & " " & t2.Name)

' меняем св-во одного из них, чтобы продемонстрировать, что это
' два различных экземпляра
t1.Name = "t1=)"
' смотрим:
Call MsgBox(t1.Name & " " & t2.Name)
' значения полей различны, что и требовалось доказать


Код

' класс CTest
Option Explicit

Private my_name As String
'

' делаем его св-вом по умолчанию
Public Property Let self(ByRef new_me As CTest)
    ' изнутри приходится всё делать "своими руками"
    Call Me.init(new_me.Name)
    ' можно и так:
    ' Name=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

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


Эксперт
***


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

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



Ясно. Убедил.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

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


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

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


 




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


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

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