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

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

Войти
Регистрация
Восстановить пароль
 
thedriveee
3 / 3 / 1
Регистрация: 16.09.2012
Сообщений: 107
#1

friend function - C++

18.09.2012, 09:37. Просмотров 410. Ответов 1
Метки нет (Все метки)

Помогите плз разобраться:
Когда я делаю инкремент "х" через закрытые функции класса - все работает нормально, а когда через функцию-друга, то он просто не увеличивает. =(

header-file
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
30
31
32
33
34
35
#ifndef TRAIN
#define TRAIN
#include <iostream>
#include <cstring>
 
 
using namespace std;
 
class str {
private:
    int x;
public:
    str (int newX);
    void incrementX (int dx);
    friend int getX (str s);
    friend void incrementX (str s, int dx);
};
 
str::str (int newX) {
    x = newX;
}
 
int getX (str s) {
    return s.x;
}
 
void str::incrementX (int dx) {
    x += dx;
}
 
void incrementX (str s, int dx) {
    s.x += dx;
}
 
#endif


cpp-file

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cstring>
#include "train.h"
 
using namespace std;
 
int main () {
 
    str s(12);
    s.incrementX(1);
    cout << getX(s) << endl; // выводит 13
 
    incrementX (s, 1);
    cout << getX(s) << endl;// тоже почему-то выводит 13
 
    system ("pause");
}

Заранее всем добрым людям спс!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2012, 09:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос friend function (C++):

C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be declared friend - C++
выкидывает C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be declared friend при компиляции. что делать?

Friend function - C++
Нужно сделать функции Length и Angle френдовыми для другого класса. Как это запилить? Sect.h #include &lt;iostream&gt; #include &lt;math.h&gt; ...

friend function - C++
После добавления дружественной ф-ции sum( а она для сложения salary у человека, которого я выберу) класс перестал работать. Что у меня не...

Friend Function - C++
Я не очень понимаю как пользаватса Friend функцыей Class.h #include &lt;stdio.h&gt; #include &quot;iostream&quot; using namespace std; ...

Friend function and Overload <<(>>) - C++
#include &lt;iostream&gt; using namespace std; class array{ private: unsigned int size; int *mas; public: array(unsigned...

Virtual friend function - C++
&lt;&lt;Виртуальный метод не может объявляться с модификатором static, но может быть объявлен как дружественная функция.&gt;&gt; Виртуальный метод...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vxg
Модератор
3158 / 1960 / 219
Регистрация: 13.01.2012
Сообщений: 7,504
18.09.2012, 09:40 #2
объект в дружественную функцию передается по значению - вы благополучно увеличиваете счетчик у копии объекта которая так и остается в стеке и убивается при возврате из функции. передавайте указатель на объект или ссылку.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2012, 09:40
Привет! Вот еще темы с ответами:

Ошибка: friend declaration declares a non-template function - C++
Всем доброго времени суток! Я корплю над задачкой: нада сделать класс вектор шаблонным, перегрузить операции ввода-вывода, и тд и тп. ...

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? - C++
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const Rational&amp;); - invalid function declaration. ...

Перегрузка операторов, friend или нет friend? - C++
Всем здравствуйте. Есть такой вопрос: при перегрузке операторов в классе(пусть будут + и = (вообще неважно, за исключением потока)) как и...

Friend для friend - C++
всем доброго времени суток, покажу проблему на примере: Class B; class A{ int F; friend B; public: A(){F=0;}; };


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

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

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