Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Передача параметров в класс - как бывает (число прочтений - 9159 )
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Передача параметров в класс - как бывает
26. Июня 2006 :: 15:47
Печать  
Вот такое использование (это из теста ЗначенияПараметровПоУмолчанию.txt )

Код
Выбрать все
// объявление
void Метод2_СПараметромНеопределенногоТипа(Строка Тип, Неопределенный Значение, Неопределенный Парам = "123");

// определение
Процедура Метод2_СПараметромНеопределенногоТипа(Тип, Значение, Парам) Экспорт
	Тип = ТипЗначенияСтр(Парам);
	Значение = Парам;
КонецПроцедуры

// использование
Процедура Тест_ПередачаПараметраПоУмолчанию_НеопределенныйТип2() Экспорт
	Перем Тип, Значение;

	миф.УстановитьТекУстановки(, 0,);
	Сам().Метод2_СПараметромНеопределенногоТипа();
	Сам().ПроверитьРавенство(Тип, "Строка");
	Сам().ПроверитьРавенство(Значение, "123");
КонецПроцедуры
 



Не очень понятно, как это работает (      вызов Сам().Метод2_СПараметромНеопределенногоТипа() и модификация локальных переменных в этом методе).
Т.е. мы из класса имеем доступ к локальным переменным процедуры?

Это опять side effect реализации ООП путем объединения контекстов, правильно я понимаю?
« Последняя редакция: 26. Июня 2006 :: 18:41 - kms »  

De quelle planète es-tu?
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Передача парметров в класс
Ответ #1 - 26. Июня 2006 :: 16:42
Печать  
kms писал(а) 26. Июня 2006 :: 15:47:
Код
Выбрать все
Сам().Метод2_СПараметромНеопределенногоТипа();
 



И тут оно не ругается на недостаток параметров? Не верю.
А если там все же написано
Код
Выбрать все
Сам().Метод2_СПараметромНеопределенногоТипа(Тип, Значение); 


то это обычная передача параметра по ссылке.
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Передача парметров в класс
Ответ #2 - 26. Июня 2006 :: 16:53
Печать  
Федор, ау, ты меня слышишь?

Запусти сегодняшние тесты и приколись!

Леха описАлся, конечно, но получилось... вот так вот получилось.

А вот если не объявить в методе переменные
Код
Выбрать все
// использование
Процедура Тест_ПередачаПараметраПоУмолчанию_НеопределенныйТип2() Экспорт
//	Перем Тип, Значение;

	миф.УстановитьТекУстановки(, 0,);
	Сам().Метод2_СПараметромНеопределенногоТипа();
//	Сам().ПроверитьРавенство(Тип, "Строка");
//	Сам().ПроверитьРавенство(Значение, "123");
КонецПроцедуры
 


Тогда, разумеется, ругается на недостаток параметров.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Передача парметров в класс
Ответ #3 - 26. Июня 2006 :: 17:05
Печать  
kms писал(а) 26. Июня 2006 :: 16:53:
Федор, ау, ты меня слышишь?

Я слышу, но не могу в это поверить, потому и переспрашиваю.

Запустить тесты в настоящий момент не имею возможности Печаль

Мда.
  
Наверх
www  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Передача парметров в класс
Ответ #4 - 26. Июня 2006 :: 17:06
Печать  
Пять баллов!  Смех
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Передача парметров в класс
Ответ #5 - 26. Июня 2006 :: 17:26
Печать  
А, я тогда полностью приведу:
Код
Выбрать все
// определение
void Метод1_СПараметромНеопределенногоТипа(Строка Тип, Неопределенный Значение, Неопределенный Парам = "");
void Метод2_СПараметромНеопределенногоТипа(Строка Тип, Неопределенный Значение, Неопределенный Парам = "123");

//использование
Процедура Тест_ПередачаПараметраПоУмолчанию_НеопределенныйТип1() Экспорт
	Перем Тип, Значение;

	миф.УстановитьТекУстановки(, 0,);

	Сам().Метод1_СПараметромНеопределенногоТипа(Тип, Значение);
	Сам().ПроверитьРавенство(Тип, "Строка");
	Сам().ПроверитьРавенство(Значение, "");
КонецПроцедуры

Процедура Тест_ПередачаПараметраПоУмолчанию_НеопределенныйТип2() Экспорт
	Перем Тип, Значение;

	миф.УстановитьТекУстановки(, 0,);
	Сам().Метод2_СПараметромНеопределенногоТипа();
	Сам().ПроверитьРавенство(Тип, "Строка");
	Сам().ПроверитьРавенство(Значение, "123");
КонецПроцедуры
 


Т.е. отличие лишь в декларации (к теме не относится) и способе вызова метода2.

Меня просто сперва охватил ужас. Я подумал, что конкретно отстал от жизни.
Такие мощные методы есть, а мы не везде ими пользуемся  Смех
  

De quelle planète es-tu?
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Передача парметров в класс
Ответ #6 - 26. Июня 2006 :: 17:53
Печать  
Ну вот. Тут уже только один шаг остался до передовых технологий. Осталось внутри класса объявить другой класс, а переменными внешнего класса он пользоваться уже может!  Смех
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Передача парметров в класс
Ответ #7 - 26. Июня 2006 :: 18:22
Печать  
ADirks, я думаю, что в этот тест надо добавить проверку на исключение.
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Передача параметров в класс - как бывает
Ответ #8 - 27. Июня 2006 :: 03:43
Печать  
Странно.  А у меня всё работает как надо, т.е. ругается про то что параметров недостаёт. (эт я вчера торопился уже, невнимательно результаты теста смотрел).

Сам тест я конечно же исправил.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Передача параметров в класс - как бывает
Ответ #9 - 27. Июня 2006 :: 08:22
Печать  
Сорри, был не прав.

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

Все работает, ура. Зато вчера было весело. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Передача параметров в класс - как бывает
Ответ #10 - 27. Июня 2006 :: 09:07
Печать  
kms писал(а) 27. Июня 2006 :: 08:22:
как легко из базового класса получить доступ к членам подклассов

пардон, если честно, то не догнал. Как?
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Передача параметров в класс - как бывает
Ответ #11 - 27. Июня 2006 :: 09:19
Печать  
Типа
Сам.ПолучитьБазовыйОбъект().ОткрытыйЧленКлассаПотомка
ЗЫ типа виртуальные члены Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Передача параметров в класс - как бывает
Ответ #12 - 27. Июня 2006 :: 09:25
Печать  
аа, тогда перефразирую
Из объекта базового класса получить доступ к членам объекта подкласса, так? Улыбка
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Передача параметров в класс - как бывает
Ответ #13 - 27. Июня 2006 :: 09:29
Печать  
не, вот так не получится, т.к. фактически в иерархии классов кроме базового класса ничего нет, поэтому 1С++ не найдет данный член и выдаст ошибку "Атрибут не найден" Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Передача параметров в класс - как бывает
Ответ #14 - 27. Июня 2006 :: 09:39
Печать  
spock писал(а) 27. Июня 2006 :: 09:25:
аа, тогда перефразирую
Из объекта базового класса получить доступ к членам объекта подкласса, так? Улыбка

Ветка была по доступу из одного суперкласса к другому.
Здесь примерно тот же принцип, о ном тоже был разговор.

Смысл.

Есть подкласс, он вызывает метод суперкласса.
В методе суперкласса можно вызывать любые методы подкласса и прочих суперклассов и использовать любые данные подклассов и других суперклассов.

Разумеется, перед вызовом метода базового класса вызвать ПолучитьБазовыйОбъект() и уже у базового объекта вызвать метод базового класса, этого не будет. Но тогда и полиморфизма в любых формах тоже не будет.

Ну, короче, я об этом знаю, поэтому иногда могу поверить даже в то, чего нет Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать