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

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

Восстановить пароль Регистрация
 
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 717
18.06.2014, 16:59     Дружественная функция класса #1
Проблема в том что дружественная функция класа механик в класе 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;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 16:59     Дружественная функция класса
Посмотрите здесь:

Преобразование типа аргумента в тип класса и дружественная функция C++
Почему дружественная функция с перегруженным оператором << не имеет доступа к данным класса? C++
Переопределение операторов как член-класса и как дружественная функция C++
C++ Дружественная функция
Дружественная функция, объявлённая ранее вне пространства имён класса -> error LNK2019 в Visual Studio 2012 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
18.06.2014, 17:24     Дружественная функция класса #2
Цитата Сообщение от mh-coder Посмотреть сообщение
Проблема в том что дружественная функция класа механик в класе car (friend void update_status) не может обращатся к полям, почему?
Потому что ф-я update_status в классе Mechanic это функция член этого класса, а не глобальная функция объявленная другом Car.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
18.06.2014, 17:39     Дружественная функция класса #3
можно сделать класс дружественным и тогда её использовать
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 717
18.06.2014, 18:59  [ТС]     Дружественная функция класса #4
а разве таким способом friend void update_status(const int& , Car&); я не делаю функцию дружественной?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
18.06.2014, 21:38     Дружественная функция класса #5
C++
1
 friend void Mechanic::update_status(const int& , Car&);
Yandex
Объявления
18.06.2014, 21:38     Дружественная функция класса
Ответ Создать тему
Опции темы

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