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

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

Восстановить пароль Регистрация
 
KrisV
0 / 0 / 0
Регистрация: 31.03.2010
Сообщений: 36
19.04.2010, 10:34     Возврат ссылки из функции #1
Изучаю С++, знаю С. Вот такой простенький вопросик есть.

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

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++
operator= возврат значения и просто ссылки C++
Возврат ссылки C++
Создание ссылки и возврат из функции C++
Возврат ссылки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
oxotnik
 Аватар для oxotnik
1584 / 1061 / 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
 Аватар для oxotnik
1584 / 1061 / 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
Эксперт С++
 Аватар для Maxim Prishchepa
1875 / 987 / 61
Регистрация: 29.03.2010
Сообщений: 2,983
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
Почетный модератор
6469 / 2244 / 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
 Аватар для oxotnik
1584 / 1061 / 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     Возврат ссылки из функции
Еще ссылки по теме:

C++ Возврат константной ссылки из функции
Возврат ссылки на локальную переменную C++
C++ Возврат ссылки на закрытый элемент данных с++

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

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

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