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

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

Войти
Регистрация
Восстановить пароль
 
KrisV
0 / 0 / 0
Регистрация: 31.03.2010
Сообщений: 36
#1

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

19.04.2010, 10:34. Просмотров 802. Ответов 8
Метки нет (Все метки)

Изучаю С++, знаю С. Вот такой простенький вопросик есть.

В чем вообще разница:

C++
1
2
3
4
5
6
7
8
9
class Str {
public:
    Str func() {return *this;};
};
и
class Str {
public:
    Str & func() {return *this;};
};
Оба вырианта компилятор переваривает на ура.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2010, 10:34     Возврат ссылки из функции
Посмотрите здесь:

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

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

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

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

Возврат ссылки на функцию. - C++
Здравствуйте, можете пожалуйста объяснить чем отличается когда функция создается просто каким то типом, и когда она создается ссылкой на...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
oxotnik
1586 / 1063 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
19.04.2010, 10:43     Возврат ссылки из функции #2
в 1-м случае передача идет по значению (создается новый объект)
во 2-м по ссылке (объект не создается, а ему назначается альтернативное имя)
KrisV
0 / 0 / 0
Регистрация: 31.03.2010
Сообщений: 36
19.04.2010, 12:03  [ТС]     Возврат ссылки из функции #3
Передача по значению - это я так понимаю при передачи в функцию.., а что имеетс в виду если речь о возвращаемом значении?
А пример использования, демонстрирующий разницу, можешь дать?
oxotnik
1586 / 1063 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
19.04.2010, 12:15     Возврат ссылки из функции #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void func1(string arg)
{
    arg = "some string1";
}
void func2(string &arg)
{
    arg = "some string1";
}
 
int main ()
{
    string str = "some string"
    func1(str);
    // str здесь будет содержать старое значение "some string"
    func2(str);
    // str здесь будет содержать новое значение "some string1"
    return 0;
}
KrisV
0 / 0 / 0
Регистрация: 31.03.2010
Сообщений: 36
19.04.2010, 12:23  [ТС]     Возврат ссылки из функции #5
Не если это параметр функции то все абсолютно ясно, интересует если возвращаемое значение.
Maxim Prishchepa
Эксперт С++
1920 / 1032 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
19.04.2010, 12:38     Возврат ссылки из функции #6
если я всё правильно понимаю, то примером может быть примерно следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int& myFunc(int &val)
{
    val+=20;
    return val;
}
int main(int argc, char *argv[])
{
    int i=0;
    int *ptrToI = &myFunc(i);
    int valueInI = *ptrToI;
    cout<<valueInI;
}
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
19.04.2010, 12:41     Возврат ссылки из функции #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<iostream>
 
class Str {
public:
    Str func() {return *this;};
public:
    int a;
};
 
class Str2 {
public:
        Str2 & func() {return *this;};
public:
    int a;
};
 
 
int main(){
    Str a;
    Str b = a.func();
    b.a = 10;
    std::cout<<a.a<<"   "<<b.a<<std::endl;
 
    Str2 a2;
    Str2 &b2 = a2.func();
    b2.a = 10;
    std::cout<<a2.a<<"   "<<b2.a<<std::endl;
    return 0;
}
-1074295272 10
10 10
oxotnik
1586 / 1063 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
19.04.2010, 13:44     Возврат ссылки из функции #8
Цитата Сообщение от KrisV Посмотреть сообщение
Не если это параметр функции то все абсолютно ясно, интересует если возвращаемое значение.
ну какбе при ссылке возвращать ту же переменную нет смысла, ибо она передается не по значению, т.е. работа происходит с тем же самым объектом, просто ему внутри назначается альтернативное имя.

для примера класс с перегруженным оператором []
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class CSomeClass
{
private:
    vector<int> array;
public:
    CSomeClass()
        {
             for (int i= 0; i <100; i++)
                  array.push_back(i);
        }
    int & operator [] (const int index)
    {
        return array[index];
    }
};
 
int main()
{
    CSomeClass sc;
    cout<<sc[88]<<endl;
    sc[88] = 10;
    cout<<sc[88]<<endl;
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2010, 13:49     Возврат ссылки из функции
Еще ссылки по теме:

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

Возврат ссылки на закрытый элемент данных с++ - C++
Я не могу понять как устроена проблема с возвратом ссылки на закрытый элемент данных.class Time{ public: int &amp;badSetHour(int hh){ ...

Возврат строки из функции - C++
Здравствуйте. Пишу программу для работы с процессами, мне нужно, чтобы в функцию передавался PID, а возвращалось имя, но выводятся...

Возврат массива из функции - C++
Есть задача: используя функции, вычислить количество элементов заранее введённых массивов, которые кратны Х, и переписать в отдельный...


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

Или воспользуйтесь поиском по форуму:
Maxim Prishchepa
Эксперт С++
1920 / 1032 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
19.04.2010, 13:49     Возврат ссылки из функции #9
как вариант, может потребоваться возвращать из функции ссылку, если Вы выделяете в функции память, и за функцией требуется работать, с выделенной областью (могу глупость сказать :-))
Yandex
Объявления
19.04.2010, 13:49     Возврат ссылки из функции
Ответ Создать тему
Опции темы

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