Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
mh-coder
30 / 28 / 4
Регистрация: 01.02.2014
Сообщений: 830
#1

Дружественная функция класса - C++

18.06.2014, 16:59. Просмотров 386. Ответов 4
Метки нет (Все метки)

Проблема в том что дружественная функция класа механик в класе car (friend void update_status) не может обращатся к полям, почему?

C++ (Qt)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <iostream>
#include <string>
 
using namespace std;
 
class Mechanic;
class Manager;
 
class Car{
 
public:
    Car(void);
    ~Car(void);
 
    friend istream & operator >> (istream&,  Car&);
    friend ostream & operator << (ostream&,  Car&);
 
    friend void update_status(const int& , Car&);
 
private:
    string firm;
    int status;
    int num;
    int zed;
 
};
 
 
class Mechanic{
 
public:
    Mechanic(void);
    ~Mechanic(void);
    friend istream & operator >> (istream&,  Car&);
 
    void update_status(const int&, Car&);
 
private:
    string name;
    int cash;
 
};
 
 
class Manager{
 
public:
    Manager(void);
    ~Manager(void);
 
 
private:
 
    string name;
 
 
};
 
void main() {
    const int count_p_menu = 3;
 
    string menu[count_p_menu] = {
        "Write the firm",
        "Write the status",
        "Write the numeric"
    };
        Car first;
        while(true) {
            system("cls");
 
cout<<first;
    for (int i = 1; i <= count_p_menu; i++)
    {
        cout<<i<<" - "<<menu[i-1]<<"\n";
    }
 
    cin>>first;
    cin>>first;
 
 
    }
 
 
 
    system("pause");
 
}   
 
 
Car::Car(void){
    firm = "";
    status = 0;
    num = 0;
    zed = 0;
}
Car::~Car(void){
}
 
istream & operator >> (istream& in, Car& cl){
    if(cl.zed == 0) {
        cout<<"Please write the number of menu - ";
        in>>cl.zed;
    }else{
 
        if(cl.zed == 1){
            cout<<"Write firm\n";
            in>>cl.firm;
            cl.zed = 0;
        }
        if(cl.zed == 2){
            cout<<"Write status\n";
            in>>cl.status;
            cl.zed = 0;
        }
        if(cl.zed == 3){
            cout<<"Write numeric\n";
            in>>cl.num;
            cl.zed = 0;
        }
        if(cl.zed > 3){
            cout<<"Write firm\n";
            in>>cl.firm;
            cl.zed = 0;
        }
 
    }
   return in; 
}
 
ostream & operator << (ostream &out,Car &cl){
    if(cl.firm != "" || cl.status != 0 || cl.num != 0){
    return cout<<"\nFirm - "<<cl.firm<<"\nStatus - "<<cl.status<<"\nNumeric - "<<cl.num<<"\n----------------\n";
    }
}
 
 
void Mechanic::update_status(const int& i, Car & cl){
 
    cl.status = i;
 
}

http://www.cyberforum.ru/cpp-beginners/thread924578.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 16:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Дружественная функция класса (C++):

Дружественная шаблонная функция шаблонного класса
Не компилируется. Подскажите правильный синтаксис. template&lt;typename T&gt; class...

Дружественная функция-оператор, доступ к закрытым полям класса
У меня есть класс MyClass, вот код: class MyClass { int x, y; public:...

Преобразование типа аргумента в тип класса и дружественная функция
Добрый день. Есть код: class Cls { private: double x; public: Cls();...

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

Почему дружественная функция не может обратиться к protected полю класса?
Не могу понять, почему функция не может обратиться к protected полю класса:...

4
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
18.06.2014, 17:24 #2
Цитата Сообщение от mh-coder Посмотреть сообщение
Проблема в том что дружественная функция класа механик в класе car (friend void update_status) не может обращатся к полям, почему?
Потому что ф-я update_status в классе Mechanic это функция член этого класса, а не глобальная функция объявленная другом Car.
0
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
18.06.2014, 17:39 #3
можно сделать класс дружественным и тогда её использовать
0
mh-coder
30 / 28 / 4
Регистрация: 01.02.2014
Сообщений: 830
18.06.2014, 18:59  [ТС] #4
а разве таким способом friend void update_status(const int& , Car&); я не делаю функцию дружественной?
0
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,193
Завершенные тесты: 1
18.06.2014, 21:38 #5
C++
1
 friend void Mechanic::update_status(const int& , Car&);
0
18.06.2014, 21:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2014, 21:38
Привет! Вот еще темы с решениями:

Почему дружественная функция с перегруженным оператором << не имеет доступа к данным класса?
В заголовочном файле &quot;klass.h&quot; есть класс: class klass { int x; public:...

Дружественная функция, объявлённая ранее вне пространства имён класса -> error LNK2019 в Visual Studio 2012
Всем привет. Долгое время пытался откопать ответ в гугле, но не получилось....

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

Дружественная функция
Хочу сделать вычисление площади как дружественную функцию, начал описывать,...


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

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

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