-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
|
||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||
Передача объекта в качестве аргумента функции (метода)13.06.2015, 07:11. Показов 3942. Ответов 15
Метки нет Все метки)
(
На "Интуите" имеем код:
Да, есть пояснение в описании функции:
"Запись this-> говорит о том, что атрибут принадлежит к тому объекту, который выполняет метод Add ( объекту, получившему сообщение Add ). В большинстве случаев this-> можно опустить." Итак, в данном случае методу Add передается копия (ведь мы же работаем не через указатель адреса) объекта num2. Если this-> - это real объекта х, скопированного с объекта num2, то по сути это и есть x.real, он же самый. Что this->real, что просто real "this-> можно опустить", что x.real - одно и то же? Почему разное написание? И еще. В Си, как я помню, невозможно передать структуру по ссылке, а только отдельные поля. В Си++ для объектов это также невозможно? Добавлено через 1 минуту ДА, и общий код :
0
|
|
13.06.2015, 07:11 | |
Ответы с готовыми решениями:
15
Передача метода класса в качестве аргумента внешней функции
Передача enum в качестве аргумента метода класса
|
Модератор
![]() 12768 / 10226 / 6146
Регистрация: 18.12.2011
Сообщений: 27,377
|
|||||||||||
13.06.2015, 07:16 | 2 | ||||||||||
Все таки вы забываете, что методу кроме параметров передается еще указатель на объект, который его вызвал.
Этот указатель называется this. В коде его обычно можно опускать, и, то, что вы написали
1
|
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
|
||||||
13.06.2015, 07:25 [ТС] | 3 | |||||
разве в качестве параметра передается не сам объект?
мы передали объект num2, функция создала с него копию х и работает с ней. Вроде так кажется
0
|
Модератор
![]() 12768 / 10226 / 6146
Регистрация: 18.12.2011
Сообщений: 27,377
|
||||||
13.06.2015, 07:30 | 4 | |||||
Сам объект доступен по разыменованному *this.
Т.е., если хочется работать не с указателем, а с объектом, придется писать:
1
|
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
|
|
13.06.2015, 07:33 [ТС] | 5 |
Подождите!
Объектом в методе Add будет х. А указатель *this - даст возможность работать с вызвавшим num2 так?
0
|
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
13.06.2015, 07:35 | 6 |
1
|
Модератор
![]() 12768 / 10226 / 6146
Регистрация: 18.12.2011
Сообщений: 27,377
|
|
13.06.2015, 07:36 | 7 |
1
|
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
|
||||||
22.06.2015, 07:28 [ТС] | 8 | |||||
"this-> говорит о том, что атрибут принадлежит к тому объекту, который выполняет метод Add"
Не пойму. Выполняющим может быть не объект, а функция, метод. Объект может вызывать метод своего родителя-класса, в теле объекта выполняются действия. Добавлено через 18 минут Вот класс:
A : B; A : C; Как продемонстрировать указатели?
0
|
Модератор
![]() 12768 / 10226 / 6146
Регистрация: 18.12.2011
Сообщений: 27,377
|
||||||
22.06.2015, 07:33 | 9 | |||||
0
|
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
|
||||||
22.06.2015, 08:40 [ТС] | 10 | |||||
this->real указывает на какой real?
У нас три объекта: x, num2, number и у каждого свой реал. - не понимаю логику. Методы принадлежат обектам, входят в их "нутро". Значит, объект вызывает метод своего класса. x - есть копия num2, так работают функции, за исключением массивов, где аргумет функции - на деле есть указатель на [0] элемент. Или this-> указывает, что в теле функции должно быть обработано поле по ссулке вызывающего функцию обект.Но тогда логически ращумнее было бы сказат thet - т.е. тот, что вызвал. this - это родная копия х, преданная в метод Add Добавлено через 11 минут
Добавлено через 42 минуты number.Add(num2); num2 - это x number - это *this тогда: 1) *this указывает на поле number 2) number вызвал метод Add с аргументом - объектом num2 3) Add создал объект х как копию с num2 Но в примере создавался указатель A *p; В определении же функции Add аргументом указан объект х типа Complex, а не указатель типа Complex. Объект не есть указатель. Потому неравнозначость примеров сохраняется, не дает полной аналогии Добавлено через 3 минуты - лишь если х указатель Иначе - х - копия num2, что я и думаю. Функция работает с копией, за исключением обработки массивов. Добавлено через 1 минуту Complex::Add(Complex x) у нас определена не как Complex::Add(Complex* x)
0
|
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|||||||||||
22.06.2015, 18:29 | 11 | ||||||||||
Albaz, в последнем посте был целый экран каких-то мыслей, верных и не очень. Резюмирую коротко.
Пусть есть код на С++:
0
|
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
|
|
05.07.2015, 04:09 [ТС] | 12 |
this - > значит указатель на объект, вызвавший метод.
т.е. не переданный в качестве аргумента Добавлено через 12 минут void Add (Complex * const this, Complex x ) - т.е. аргумент - не указатель на конкретный объект типа структура, а указатель к абстрактная структура - шаблон?
0
|
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
05.07.2015, 07:37 | 13 |
0
|
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
|
|
08.07.2015, 07:20 [ТС] | 14 |
да я перепутал.
а исправить поздно - 5 мин истекли. В целом, я понял, что вис говорит, что берется переменная данного класса, который еще не имеет объектов. а вот в методе класса объкт создается в аргументе void Add ( Complex x ); Здесь есть объект типа Комплекс. А в классе Комплекс еще их нет. Теоретически, можно вместо вис писать Комплекс для более ясной смысловой сути.
0
|
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
08.07.2015, 07:45 | 15 |
Это либо очень искаженное восприятие реальности, либо очень криво сформулировано. Почитайте книги.
0
|
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
|
|
08.07.2015, 07:52 [ТС] | 16 |
но это последнее наверное будет выглядеть как работа с абстрактным классои (слабоссылочным).
0
|
08.07.2015, 07:52 | |
Помогаю со студенческими работами здесь
16
Передача массива в качестве аргумента функции Передача функции в качестве аргумента массив
Возможна ли передача двумерного массива в качестве аргумента функции по ссылке Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |