Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
KrisV
0 / 0 / 1
Регистрация: 31.03.2010
Сообщений: 36
#1

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

19.04.2010, 10:34. Просмотров 900. Ответов 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;};
};
Оба вырианта компилятор переваривает на ура.
http://www.cyberforum.ru/cpp-beginners/thread1027705.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2010, 10:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Возврат ссылки из функции (C++):

Возврат константной ссылки из функции
Можно ли из функции возвращать константную ссылку? Есть след. классы: class A...

Возврат ссылки на указатель из функции
#include <iostream> int*& getPtrRef(int*& ref) { int*& cpy = ref; ...

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

Возврат ссылки
Задача которая считывает массив и определяет минимальный, макисмальный, первый...

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

8
oxotnik
1605 / 1082 / 67
Регистрация: 21.08.2008
Сообщений: 4,560
Записей в блоге: 1
19.04.2010, 10:43 #2
в 1-м случае передача идет по значению (создается новый объект)
во 2-м по ссылке (объект не создается, а ему назначается альтернативное имя)
0
KrisV
0 / 0 / 1
Регистрация: 31.03.2010
Сообщений: 36
19.04.2010, 12:03  [ТС] #3
Передача по значению - это я так понимаю при передачи в функцию.., а что имеетс в виду если речь о возвращаемом значении?
А пример использования, демонстрирующий разницу, можешь дать?
0
oxotnik
1605 / 1082 / 67
Регистрация: 21.08.2008
Сообщений: 4,560
Записей в блоге: 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;
}
1
KrisV
0 / 0 / 1
Регистрация: 31.03.2010
Сообщений: 36
19.04.2010, 12:23  [ТС] #5
Не если это параметр функции то все абсолютно ясно, интересует если возвращаемое значение.
0
Maxim Prishchepa
Эксперт С++
1924 / 1036 / 109
Регистрация: 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;
}
0
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
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
1
oxotnik
1605 / 1082 / 67
Регистрация: 21.08.2008
Сообщений: 4,560
Записей в блоге: 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;
}
0
Maxim Prishchepa
Эксперт С++
1924 / 1036 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
19.04.2010, 13:49 #9
как вариант, может потребоваться возвращать из функции ссылку, если Вы выделяете в функции память, и за функцией требуется работать, с выделенной областью (могу глупость сказать :-))
0
19.04.2010, 13:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2010, 13:49
Привет! Вот еще темы с решениями:

Возврат ссылки из метода
Доброго времени суток! Дано: структура: struct Point { float x; float...

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

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

Не работает возврат ссылки на объект
Есть простой класс с двумя полями и одним методом, который печатает их. Функция...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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