Форум программистов, компьютерный форум CyberForum.ru

Указатели или ссылки (в качестве аргументов функции) ? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
23.05.2013, 10:23     Указатели или ссылки (в качестве аргументов функции) ? #1
В каких случая надо использовать ссылки и в каких указатели в качестве аргументов функции?
В общем поняла, что и те и другие полезны для ссылания на крупные обьекты типа классов.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2013, 10:23     Указатели или ссылки (в качестве аргументов функции) ?
Посмотрите здесь:

C++ функции,указатели и ссылки.
Указатели на массивы в качестве аргументов C++
C++ Написать программу с использованием функции, которая сравнивает две строки, заданные в качестве её аргументов
Ссылки или указатели (Написать функцию , которая вычисляет гипотенузу, площадь и периметр прямоугольного треугольника) C++
Идентификаторы списка в качестве аргументов функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2013, 10:08     Указатели или ссылки (в качестве аргументов функции) ? #21
Цитата Сообщение от programina Посмотреть сообщение
если окажется, что ссылка есть копия обьекта?
Ссылка не может быть копией, это гарантировано стандартом.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.05.2013, 10:14     Указатели или ссылки (в качестве аргументов функции) ? #22
Цитата Сообщение от oxotnik Посмотреть сообщение
C++
1
2
3
4
5
cObj cObj::operator + (const cObj & obj)
{
   a += obj.a;
   return (*this);
}
только модифицировать ничего не надо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//member function
cObj& cObj::operator += (const cObj & right)
{
     a += right.a;
     return *this;
}
 
//free function
cObj operator + (const cObj & left, const cObj & right)
{
    cObj res(left);
    return res += right;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.05.2013, 10:14     Указатели или ссылки (в качестве аргументов функции) ? #23
Цитата Сообщение от oxotnik Посмотреть сообщение
А какой тогда смысл у operator+ в первом примере, если он не изменяет сам класс?
Это уже перегрузка +=. При сложении значения слагаемых не изменяются.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2013, 10:14     Указатели или ссылки (в качестве аргументов функции) ? #24
Цитата Сообщение от programina Посмотреть сообщение
Что значит "альтернативное имя" - это скопированный обьект или указатель на одну и тут же область памяти?
Ссылка-параметр - указатель на ту же память, остальные ссылки могут быть реализованы тремя способами: или как синтаксическая надстройка над указателем, или на этапе компиляции как связанная строчка в таблице переменных, или опять же на этапе компиляции как запись в дополнительном столбце имён переменных. Она в любом случае сошлётся на ту же память, но обращение по ссылке, не являющейся параметром, может быть оттранслировано и во фрагмент кода, полностью идентичный обращению к той же памяти по имени самой переменной, а не ссылки на неё, стандарт иного не гарантирует.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.05.2013, 10:14     Указатели или ссылки (в качестве аргументов функции) ? #25
oxotnik, Чего? Оператор + НЕ должен изменять сам класс. Оператор += должен.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2013, 10:17     Указатели или ссылки (в качестве аргументов функции) ? #26
ForEveR, а Вам не приходило в голову задуматься о причинах ошибок и глюков даже в ОО-проектах? В частности о причинах знаменитой утечки памяти?
oxotnik
24.05.2013, 10:20
  #27

Не по теме:

звиняйте, бес попутал

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.05.2013, 10:25     Указатели или ссылки (в качестве аргументов функции) ? #28
taras atavin, Это вы о чем глаголите? О том, что оператор + должен изменять объект?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2013, 10:30     Указатели или ссылки (в качестве аргументов функции) ? #29
Цитата Сообщение от ForEveR Посмотреть сообщение
Это вы о чем глаголите? О том, что оператор + должен изменять объект?
О том, что при всех Ваших стараниях всё равно найдутся деятели, запутывающие исходник путём перегрузок оператора +, делающих то, что должен делать +=, а то и *=. Именно они и пишут глючно.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
24.05.2013, 10:45  [ТС]     Указатели или ссылки (в качестве аргументов функции) ? #30
Цитата Сообщение от oxotnik Посмотреть сообщение
C++
1
2
3
4
5
cObj cObj::operator + (const cObj & obj)
{
    a += obj.a;
    return (*this);
}
Кстати в том примере, который я видела, оператор присваивания реализован именно так.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2013, 10:49     Указатели или ссылки (в качестве аргументов функции) ? #31
Цитата Сообщение от programina Посмотреть сообщение
Кстати в том примере, который я видела, оператор присваивания реализован именно так.
Как так? Под именем оператора сложения что ли? Так писать нельзя, это источник глюков. Или меняет объект, от которого вызвал? Ну так на то это и присваивание. Сложение то здесь при чём?
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
24.05.2013, 10:56  [ТС]     Указатели или ссылки (в качестве аргументов функции) ? #32
Цитата Сообщение от taras atavin Посмотреть сообщение
Как так? Под именем оператора сложения что ли? Так писать нельзя, это источник глюков. Или меняет объект, от которого вызвал? Ну так на то это и присваивание. Сложение то здесь при чём?
нет, там было только присваивание = без +=
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2013, 12:05     Указатели или ссылки (в качестве аргументов функции) ? #33
Цитата Сообщение от programina Посмотреть сообщение
нет, там было только присваивание = без +=
Ну так присваивание, как простое, так и составное, как раз и должно менять сам объект, в отличие от сложения. Охотника же явно глюк попутал.
programina
24.05.2013, 12:14  [ТС]
  #34

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
Охотника же явно глюк попутал.
он же охотник, его леший попутал
А вообще не ошибается тот, кто ничего не делает

Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11812 / 6791 / 768
Регистрация: 27.09.2012
Сообщений: 16,854
Записей в блоге: 2
Завершенные тесты: 1
24.05.2013, 13:32     Указатели или ссылки (в качестве аргументов функции) ? #35
Цитата Сообщение от programina Посмотреть сообщение
Кстати в том примере, который я видела, оператор присваивания реализован именно так.
Доставайте объекты из пула, чтобы избежать их создания, но вопрос стоит ли оно этого в данном случае.
Цитата Сообщение от programina Посмотреть сообщение
Кстати в том примере, который я видела, оператор присваивания реализован именно так.
operator+ не должен изменять объект, а должен работать именно так, как ожидает клиент.
C++
1
2
int a=3,b=5;
a+b;
У Вас же a в данном случае не меняется.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.05.2013, 13:35     Указатели или ссылки (в качестве аргументов функции) ? #36
Цитата Сообщение от Croessmah Посмотреть сообщение
operator+ не должен изменять объект, а должен работать именно так, как ожидает клиент.
C++
1
2
int a=3,b=5;
a+b;
У Вас же a в данном случае не меняется.
Как он должен работать и как всё рано напишет какое нибудь чудило - далеко не одно и тоже, иначе глюков бы не было.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
24.05.2013, 14:21     Указатели или ссылки (в качестве аргументов функции) ? #37
Цитата Сообщение от ForEveR Посмотреть сообщение
UB ж.
Не понял твоего сообщения. Поясни.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
24.05.2013, 14:25  [ТС]     Указатели или ссылки (в качестве аргументов функции) ? #38
Цитата Сообщение от Vourhey Посмотреть сообщение
Не понял твоего сообщения. Поясни.
undefined behavior
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
24.05.2013, 14:38     Указатели или ссылки (в качестве аргументов функции) ? #39
В каком компилере?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2013, 14:46     Указатели или ссылки (в качестве аргументов функции) ?
Еще ссылки по теме:

C++ Константные указатели в качестве аргументов функций
C++ Дан файл, переписать его в обратном направлении, передавая имена файлов в качестве аргументов функции main
Ostream и ofstream в качестве аргументов полиморфной функции C++

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

Или воспользуйтесь поиском по форуму:
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
24.05.2013, 14:46  [ТС]     Указатели или ссылки (в качестве аргументов функции) ? #40
Цитата Сообщение от Vourhey Посмотреть сообщение
В каком компилере?
в любом стандартном компилере
Yandex
Объявления
24.05.2013, 14:46     Указатели или ссылки (в качестве аргументов функции) ?
Ответ Создать тему
Опции темы

Текущее время: 12:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru