Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Rashmash
2 / 2 / 2
Регистрация: 04.04.2011
Сообщений: 75
#1

Возврат ссылки на функцию.

14.04.2012, 04:47. Просмотров 832. Ответов 8
Метки нет (Все метки)

Здравствуйте, можете пожалуйста объяснить чем отличается когда функция создается просто каким то типом, и когда она создается ссылкой на какой нибудь тип, и где можно применять второй тип создания функции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2012, 04:47
Ответы с готовыми решениями:

Возврат ссылки
Задача которая считывает массив и определяет минимальный, макисмальный, первый...

Возврат ссылки
int & function(int); Понятно для чего передают аргументы в функцию как...

Возврат ссылки из метода
Доброго времени суток! Дано: структура: struct Point { float x; float...

Возврат ссылки из функции
Изучаю С++, знаю С. Вот такой простенький вопросик есть. В чем вообще...

Создание ссылки и возврат из функции
Есть вот такая функция, возвращает максимальный элемент. template <typename...

8
Avazart
Эксперт С++
7717 / 5626 / 549
Регистрация: 10.12.2010
Сообщений: 25,328
Записей в блоге: 17
14.04.2012, 05:08 #2
Например когда ф-ция получает ссылку как параметр и ее надо возвратить.

Вот пример кода, но правда не для ф-ции, а для операторов i/o
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//----------------------------------------------------------------------------
ostream &operator << (ostream &stream,String Str)
{
 stream<<Str.c_str();
 return stream;
}
//--------------------------------------------------------------------------
istream &operator >> (istream &stream,String &Str)
{
 string str;
 stream>>str;
 Str = str.c_str();
 return stream;
}
//--------------------------------------------------------------------------
1
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
14.04.2012, 11:15 #3
Цитата Сообщение от Rashmash Посмотреть сообщение
Здравствуйте, можете пожалуйста объяснить чем отличается когда функция создается просто каким то типом, и когда она создается ссылкой на какой нибудь тип, и где можно применять второй тип создания функции.
данные передаются по значению, то есть вы в функции оперируете локальными переменными. Если передаете по ссылке то такая переменная внутри функции изменяется
1
Rashmash
2 / 2 / 2
Регистрация: 04.04.2011
Сообщений: 75
14.04.2012, 15:19  [ТС] #4
Цитата Сообщение от Avazart Посмотреть сообщение
Например когда ф-ция получает ссылку как параметр и ее надо возвратить.

Вот пример кода, но правда не для ф-ции, а для операторов i/o
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//----------------------------------------------------------------------------
ostream &operator << (ostream &stream,String Str)
{
 stream<<Str.c_str();
 return stream;
}
//--------------------------------------------------------------------------
istream &operator >> (istream &stream,String &Str)
{
 string str;
 stream>>str;
 Str = str.c_str();
 return stream;
}
//--------------------------------------------------------------------------
а чтобы изменилось в программе при вызове какого нибудь объекта, если бы мы создали эти функции без ссылки на тип, и также возвращали stream? Они бы не работали правильно? Почему?) Заранее спасибо.
0
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
14.04.2012, 15:35 #5
Цитата Сообщение от Rashmash Посмотреть сообщение
а чтобы изменилось в программе при вызове какого нибудь объекта, если бы мы создали эти функции без ссылки на тип, и также возвращали stream? Они бы не работали правильно? Почему?) Заранее спасибо.
я ответ написал выше, прочти еще раз. Или прочти мануал: передача аргументов по значению, ссылке
0
Rashmash
2 / 2 / 2
Регистрация: 04.04.2011
Сообщений: 75
14.04.2012, 15:55  [ТС] #6
panicwassano мне кажется вы меня не поняли. Я имел ввиду не передача аргументов функции по ссылке, а создания функции по ссылке. Например
class SomeClass;
SomeClass& AddItem(int* a, SomeClass& new);
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.04.2012, 16:33 #7
Это не создание ссылки на функцию, а всего лишь функция, которая возвращает ссылку на SomeClass
0
Rashmash
2 / 2 / 2
Регистрация: 04.04.2011
Сообщений: 75
14.04.2012, 16:55  [ТС] #8
Ну я понял что она возвращает ссылку на SomeClass, только что это дает? как это отличается от того что она бы просто возвращала SomeClass? как это влияет на каком нибудь объекте при вызове этой функции?
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.04.2012, 17:08 #9
Например, она может возвращать ссылку на статический член, тогда пользователь класса сможет изменять этот член.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
class SomeClass
{
public:
    int value;
};
 
SomeClass& foo()
{
    static SomeClass s;
    
    return s;
}
 
int main()
{
    std::cout << foo().value << std::endl;
    ++foo().value;  
    std::cout << foo().value << std::endl;
}
Еще это дает возможность писать подобные конструкции(используется в iostream, там операции битовых сдвигов возвращают ссылки)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
class Integer
{
public:
    int value;
    
    Integer() : value(0) {}
    
    Integer& add(int x)
    {
        value += x;
        return *this;
    }
};
 
int main()
{
    Integer x;
    std::cout << x.add(1).add(2).add(3).value << std::endl; //после выполнения этой строки x.value == 6
}
1
14.04.2012, 17:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2012, 17:08

Не работает возврат ссылки на объект
Есть простой класс с двумя полями и одним методом, который печатает их. Функция...

Возврат ссылки на локальную переменную
Привет, есть такой код: int*&amp; change(void) { int* x(new int(50));...

Возврат ссылки на указатель из функции
#include &lt;iostream&gt; int*&amp; getPtrRef(int*&amp; ref) { int*&amp; cpy = ref; ...


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

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

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