какие способы существуют для передачи объектов функциям

Передача объектов в функции и методы

Помощь в написании контрольных, курсовых и дипломных работ здесь.

какие способы существуют для передачи объектов функциям. Смотреть фото какие способы существуют для передачи объектов функциям. Смотреть картинку какие способы существуют для передачи объектов функциям. Картинка про какие способы существуют для передачи объектов функциям. Фото какие способы существуют для передачи объектов функциямПередача объектов в методы по указателю
Здравствуйте. Тема звучит достаточно просто, но на самом деле я сформулировал её наверно.

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

Передача объектов в функции
Добрый день. После C изучал C#, теперь перешел к плюсам. Столкнулся с непониманием. В каких.

Передача массива объектов функции
Выбивает о каком-то недопустимом внешнем символе, подскажите что не так. Вот цикл, который.

Смотря что и зачем надо передать.
Если с объектом внутри функции необходимо производить некоторые действия, то объект лучше передать по ссылке.
Если требуется передача копии объекта, то его передают по значению (вызывается конструктор копирования).
Если вызов конструктора копирования нежелателен (например, по соображениям эффективности), но никаких «модификаций» объекта внутри функции не требуется, можно передать объект по константной ссылке.
Если речь идёт о полиморфных классах, то функция, скорее всего, должна принимать указатель на базовый класс, а в неё передаются адреса объектов производных классов.

Источник

Сколько есть способов передачи аргументов в функцию?

Как по мне, то в С есть передача аргументов в функцию только по значению, а в С++ по факту тоже только передача по значению. То есть, передачи по указателю не может быть, потому что указатель содержит адрес, а это тоже значение. Так что правильней говорить, что передача по значению. Ну а насчет ссылок, то это те же указатели с константным адресом и которые неявно преобразуются к указателю, так что тоже передача по значению.
То есть, есть только передача по значению. А когда говорят о передаче по указателю и ссылке, то это скорей для того, чтобы внести ясность о том, будет ли переменная копирована или взят её адрес или так же неявно взят адрес с невозможностью заменить его на другой адрес.

В общем, условно(для упрощения понимания) есть 2 способа передачи аргументов в функцию в Си :
по значению,
по указателю.

И 3 способа в C++:
по значению,
по указателю,
по ссылке.

Из кода видно, что сами параметры могут быть и ссылкой и указателем, но тем не менее во всех трех случаях инициализированы они будут аргументами, которые передаются только по значению.
Что-то мне кажется, что скорей всего не правильно был сформулирован вопрос теста и параметры не передаются в функцию, так как они и так в её сигнатуре, а передаются аргументы, ну а параметры просто инициализируются где-то между сигнатурой и телом в области видимости под которую попадает тело функции.

4 ответа 4

Насколько я понимаю, в C ровно один способ передачи аргументов: по значению. Передаёте ли вы по значению число или указатель, вы получаете с той стороны копию этого числа/указателя: если вы меняете число внутри функции, с его «внешним прообразом» (который может, кстати, быть и выражением) ничего не случается; если внешний прообраз меняется в течение выполнения функции, на значении аргумента это никак не отражается.

Иногда говорят, что передавая указатель на объект в функцию, вы как бы тем самым неявно передаёте сам объект в функцию «по указателю». Это на самом деле не вполне верный подход.

Давайте я приведу пример: представьте себе, что вам передали число. Вы использовали это число как индекс в глобальном массиве, и изменили элемент этого массива. Можно ли сказать, что вам был передан этот элемент? Нет, вы получили лишь число.

Точно так же можно смотреть на указатель как на индекс в памяти, рассматриваемой как массив байт. Доступ к объекту через указатель ничем не лучше и не хуже доступа к ячейке массива по индексу.

В C++ появился новый вид передачи параметров: по ссылке. По существу, передача «по ссылке» ничем не отличается от передачи указателя кроме того, что (1) ссылка не может соответствовать NULL-указателю в корректной программе, (2) ссылка синтаксически ведёт себя как разыменованный указатель.

Однако, разработчики C++ советуют всё же видеть в передачу по ссылке другую семантику: ссылка является «алиасом», другими именем объекта. Хотя такая семантика и более привлекательна с точки зрения ясности программ, всё же ссылка на объект и сам объект — не одно и то же. В частности, ссылка может пережить объект, и вы получите при попытке обратиться к ней undefined behaviour. Если бы ссылка была самим объектом (как это часто пытаются подать), такого произойти бы не смогло.

Следовать ли совету разработчиков или думать о передаче по ссылке как о синтаксическом сахаре для передачи по указателю — личное дело каждого. Я бы всё же советовал думать так, как советуют разработчики, но не упускать из виду, что эта абстракция «протекает».

ЗЫ: Пример кода без явных ошибок (наподобие возврата ссылки на локальную переменную), в котором ссылка на объект переживает сам объект:

Источник

Для чего нужна передача объекта в функцию по значению и по указателю в С++?

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

По значению вообще не понимаю когда нужно если есть «const &».

Обращаю внимание что речь идет именно о двух конкретных случаях (передача в функцию объекта по значению, передача в функцию указателя на один объект), именно в рамках хорошей/большой программы/проекта.

Указатели действительно не очень востребованы в языке C++, так как в большинстве случаев лучше использовать ссылки. Однако в языке С ссылок нет, и поэтому для совместимости иногда используют указатели.
Передача по значению создаёт копию передаваемого объекта. Это используется тогда, когда в функции (или методе) вам может понадобится изменить объект, однако эти изменения не должны затронуть тот объект, который вы передавали.

Например, поиск наибольшего общего делителя:

В функции изменяются копии переданных объектов, а не сами объекты.

Upd.1
Указатели используются в многих структурах данных. Например, связный список:

Значение здесь использовать нельзя, так как объект не может содержать внутри объект того же типа (получается бесконечная рекурсия). Ссылку использовать также нельзя, так как ссылка должна быть сразу привязана к объекту (переменной), а в случае со списком, элементы могут быть добавлены/изменены в любое время.

Upd.2
Можно создавать указатели на функции. Функцию нельзя передать по значению или по ссылке.

да я понимаю эти базовые вещи. мне не понятно зачем «по значению» когда можно «по const ссылке». при этом же данные также неизменяемы.

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

Источник

Передача объекта в функцию

Помощь в написании контрольных, курсовых и дипломных работ здесь.

какие способы существуют для передачи объектов функциям. Смотреть фото какие способы существуют для передачи объектов функциям. Смотреть картинку какие способы существуют для передачи объектов функциям. Картинка про какие способы существуют для передачи объектов функциям. Фото какие способы существуют для передачи объектов функциямПередача объекта в функцию или функцию друга
Здравствуйте, уважаемые программисты 🙂 К примеру есть такой код. #include using.

1.
отсутствует operator+

функция должна вернуть наружу некий int.

проблема со сложением 2х объектов

Добавлено через 1 минуту

1.
отсутствует operator+

функция должна вернуть наружу некий int.

рассмотрим функцию поподробнее:

если выполнится первое условие, тогда сработает return 0;

дальше у вас будет жЁпа.

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

кстати, гляньте на эту функцию:

она должна вернуть наружу результат сложения.
но она так же ничего не возвращает.

то бишь, здесь у вас точно такая же жЁпа.

вместо суммы вы будете получать случайный мусор.

сложили два временных объекта, получили мусор.
нормально чо.

ругается на вызов функции normal

Добавлено через 5 минут
PS normal() находится в классе

Передача объекта по указателю в функцию
Здравствуйте. При передаче объекта в метод другого объекта по указателю, метод получает непонятно.

какие способы существуют для передачи объектов функциям. Смотреть фото какие способы существуют для передачи объектов функциям. Смотреть картинку какие способы существуют для передачи объектов функциям. Картинка про какие способы существуют для передачи объектов функциям. Фото какие способы существуют для передачи объектов функциямПередача объекта в вызывающую функцию
Всем привет! Что-то меня переклинило, помогите. Задача в том, что в функции, вызванной из main().

Передача функционального объекта в функцию
Здорова! Никак не могу передать функциональный объект в функцию. От примерчик, функция.

какие способы существуют для передачи объектов функциям. Смотреть фото какие способы существуют для передачи объектов функциям. Смотреть картинку какие способы существуют для передачи объектов функциям. Картинка про какие способы существуют для передачи объектов функциям. Фото какие способы существуют для передачи объектов функциямПередача объекта класса в функцию С++
Всем привет! Возник вопрос по классам. Допустим мне нужно изменить объект класса через функцию.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *