Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
lonelyhunter
65 / 65 / 60
Регистрация: 11.11.2015
Сообщений: 355
1

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

04.05.2017, 21:28. Просмотров 709. Ответов 6
Метки нет (Все метки)

Добрый день. После C изучал C#, теперь перешел к плюсам.
Столкнулся с непониманием.
В каких случаях следует передавать объект в функцию(метод) по ссылке/константной ссылке, а в каких по значению?
В большинстве примеров вижу передачу по константной ссылке. Чем это обосновывается?
Извините, если уж очень нубский вопрос.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2017, 21:28
Ответы с готовыми решениями:

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

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

Передача объектов в функции и методы
Как лучше передавать объекты в функции и методы и почему?

Передача объектов функциям
Задание: "Переделать свою задачу из лабораторной N, сделав функции не частью класса, а внешними,...

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

6
nmcf
6535 / 5758 / 2622
Регистрация: 14.04.2014
Сообщений: 24,498
04.05.2017, 21:30 2
Тем, что копия создаётся без ссылки. Не оптимально.
0
MannyCalavera
2 / 2 / 1
Регистрация: 20.02.2017
Сообщений: 7
Завершенные тесты: 1
04.05.2017, 21:42 3
1. Ccылка = константный указатель, единственное отличие -- разъименовывается автоматически, нет опасности случайно забыть разъименовать и изменить адрес.
C++
1
2
3
4
5
6
int a=100;//два обычных объекта типа int   
    int b=222;
    
        int *const P2=&a; //Константный указатель
    *P2=987; //Менять значение разрешено
    //P2=&b; //Но изменять адрес не разрешается
(взято отсюда http://ci-plus-plus-snachala.ru/?p=1120)

2. При передаче в фанкцию создается формальная переменная, т. е. берется только значение, которое существует исключительно в пределах функции. После окончания функции с формальной переменная count ничего не произойдет.
например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Check(int ar[][N], int N, int count)
{
    int count = 0;
    for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < N; ++j)
        {
            if (ar[i][j] == 1)
            { 
            ++count;
            }
        }
    }
}
Если вы хотите, чтобы значение изменилось во всех функциях, то следует передавать по ссылке или указателю (так изменение произойдет непосредственно по адресу). Это истинно для обычных переменных, массивы в свою очередь изменяются независимо от того, как их передать в переменную.
0
nd2
3100 / 2594 / 1134
Регистрация: 29.01.2016
Сообщений: 8,690
04.05.2017, 21:49 4
Цитата Сообщение от lonelyhunter Посмотреть сообщение
В большинстве примеров вижу передачу по константной ссылке. Чем это обосновывается?
Это говорит о том, что объект в функции не будет изменяться. Если передача по простой ссылке, то, предполагается, что объект в функции будет изменяться. В обоих случаях отсутствует копирование, в отличие от передачи по значению.
0
lonelyhunter
65 / 65 / 60
Регистрация: 11.11.2015
Сообщений: 355
05.05.2017, 18:20  [ТС] 5
Т.е. основная цель - выигрыш от отсутствия избыточного копирования, верно?
0
Mournful Max
Велосипедист...
349 / 216 / 73
Регистрация: 15.12.2015
Сообщений: 785
Завершенные тесты: 1
05.05.2017, 18:37 6
lonelyhunter, передача объекта по значению -- это возможность языка C++. Делать такое без необходимости не нужно, так как это пустая трата времени и памяти (в прямом смысле этой фразы, ведь легче создать локальную переменную, которая занимает до 8 байт и ссылается на объект, который, кстати, может занимать мегабайты).
В некоторых известных ЯП (Java, например), передавать объект можно исключительно по ссылке
0
h3mbr0
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
05.05.2017, 18:48 7
Цитата Сообщение от lonelyhunter Посмотреть сообщение
Т.е. основная цель - выигрыш от отсутствия избыточного копирования, верно?
Раз учили СИ, представляйте ссылки как безопасные указатели. В общем случае так оно и есть
0
05.05.2017, 18:48
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2017, 18:48

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

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

Передача свойств объектов между функциями
Народ, I need help! Есть класс: class Employees { public: Employees();...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.