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

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

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

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

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

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

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

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

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

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

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

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

8
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,795
Записей в блоге: 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
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.04.2012, 11:15 #3
Цитата Сообщение от Rashmash Посмотреть сообщение
Здравствуйте, можете пожалуйста объяснить чем отличается когда функция создается просто каким то типом, и когда она создается ссылкой на какой нибудь тип, и где можно применять второй тип создания функции.
данные передаются по значению, то есть вы в функции оперируете локальными переменными. Если передаете по ссылке то такая переменная внутри функции изменяется
1
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? Они бы не работали правильно? Почему?) Заранее спасибо.
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.04.2012, 15:35 #5
Цитата Сообщение от Rashmash Посмотреть сообщение
а чтобы изменилось в программе при вызове какого нибудь объекта, если бы мы создали эти функции без ссылки на тип, и также возвращали stream? Они бы не работали правильно? Почему?) Заранее спасибо.
я ответ написал выше, прочти еще раз. Или прочти мануал: передача аргументов по значению, ссылке
0
Rashmash
2 / 2 / 0
Регистрация: 04.04.2011
Сообщений: 75
14.04.2012, 15:55  [ТС] #6
panicwassano мне кажется вы меня не поняли. Я имел ввиду не передача аргументов функции по ссылке, а создания функции по ссылке. Например
class SomeClass;
SomeClass& AddItem(int* a, SomeClass& new);
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.04.2012, 16:33 #7
Это не создание ссылки на функцию, а всего лишь функция, которая возвращает ссылку на SomeClass
0
Rashmash
2 / 2 / 0
Регистрация: 04.04.2011
Сообщений: 75
14.04.2012, 16:55  [ТС] #8
Ну я понял что она возвращает ссылку на SomeClass, только что это дает? как это отличается от того что она бы просто возвращала SomeClass? как это влияет на каком нибудь объекте при вызове этой функции?
0
diagon
Higher
1929 / 1195 / 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
}
1
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++
Как сделать так, чтобы когда функция выполнилась, она вернула управление не в точку, из которой вызывалась, а в начало вызывающей функции?


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
14.04.2012, 17:08
Ответ Создать тему
Опции темы

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