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

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

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

C++ Возврат функцией указателя на функцию
operator= возврат значения и просто ссылки C++
Возврат в функцию C++
Возврат ссылки C++
Создание ссылки и возврат из функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 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;
}
//--------------------------------------------------------------------------
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.04.2012, 11:15     Возврат ссылки на функцию. #3
Цитата Сообщение от Rashmash Посмотреть сообщение
Здравствуйте, можете пожалуйста объяснить чем отличается когда функция создается просто каким то типом, и когда она создается ссылкой на какой нибудь тип, и где можно применять второй тип создания функции.
данные передаются по значению, то есть вы в функции оперируете локальными переменными. Если передаете по ссылке то такая переменная внутри функции изменяется
Rashmash
2 / 2 / 0
Регистрация: 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? Они бы не работали правильно? Почему?) Заранее спасибо.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.04.2012, 15:35     Возврат ссылки на функцию. #5
Цитата Сообщение от Rashmash Посмотреть сообщение
а чтобы изменилось в программе при вызове какого нибудь объекта, если бы мы создали эти функции без ссылки на тип, и также возвращали stream? Они бы не работали правильно? Почему?) Заранее спасибо.
я ответ написал выше, прочти еще раз. Или прочти мануал: передача аргументов по значению, ссылке
Rashmash
2 / 2 / 0
Регистрация: 04.04.2011
Сообщений: 75
14.04.2012, 15:55  [ТС]     Возврат ссылки на функцию. #6
panicwassano мне кажется вы меня не поняли. Я имел ввиду не передача аргументов функции по ссылке, а создания функции по ссылке. Например
class SomeClass;
SomeClass& AddItem(int* a, SomeClass& new);
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.04.2012, 16:33     Возврат ссылки на функцию. #7
Это не создание ссылки на функцию, а всего лишь функция, которая возвращает ссылку на SomeClass
Rashmash
2 / 2 / 0
Регистрация: 04.04.2011
Сообщений: 75
14.04.2012, 16:55  [ТС]     Возврат ссылки на функцию. #8
Ну я понял что она возвращает ссылку на SomeClass, только что это дает? как это отличается от того что она бы просто возвращала SomeClass? как это влияет на каком нибудь объекте при вызове этой функции?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2012, 17:08     Возврат ссылки на функцию.
Еще ссылки по теме:

Возврат ссылки C++
Передача аргументов в функцию и возврат значения C++
C++ Возврат константной ссылки из функции

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 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
}
Yandex
Объявления
14.04.2012, 17:08     Возврат ссылки на функцию.
Ответ Создать тему
Опции темы

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