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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Rashmash
2 / 2 / 0
Регистрация: 04.04.2011
Сообщений: 75
#1

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

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

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

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

Возврат ссылки - C++
Задача которая считывает массив и определяет минимальный, макисмальный, первый отрицательный элемент, и их индексы. По заданию надо ее...

Возврат ссылки из функции - C++
Изучаю С++, знаю С. Вот такой простенький вопросик есть. В чем вообще разница: class Str { public: Str func() {return...

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

Создание ссылки и возврат из функции - C++
Есть вот такая функция, возвращает максимальный элемент. template <typename Type> inline const Type max_(const Type& a, const Type& b) ...

Возврат константной ссылки из функции - C++
Можно ли из функции возвращать константную ссылку? Есть след. классы: class A { /*чтото тяжёлое, сотни байт, например массив, или...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
7100 / 5277 / 267
Регистрация: 10.12.2010
Сообщений: 23,266
Записей в блоге: 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
1926 / 1192 / 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++
Я не могу понять как устроена проблема с возвратом ссылки на закрытый элемент данных.class Time{ public: int &amp;badSetHour(int hh){ ...

operator= возврат значения и просто ссылки - C++
Здорова господа! Снова пытаюсь чуток в С++ разобраться, с перегрузкой операций, снова ничерта непонятно. от допустим класс class...

Возврат в функцию - C++
Как сделать так, чтобы когда функция выполнилась, она вернула управление не в точку, из которой вызывалась, а в начало вызывающей функции?

Возврат функцией указателя на функцию - C++
Всем привет! У меня возникла такая проблема: класс имеет поле-указатель на функцию. В методе, который осуществляет доступ к этуму полю,...


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

Или воспользуйтесь поиском по форуму:
diagon
Higher
1926 / 1192 / 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     Возврат ссылки на функцию.
Ответ Создать тему
Опции темы

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