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

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

Войти
Регистрация
Восстановить пароль
 
mh-coder
24 / 23 / 3
Регистрация: 01.02.2014
Сообщений: 739
#1

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

18.06.2014, 16:59. Просмотров 309. Ответов 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;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 16:59     Дружественная функция класса
Посмотрите здесь:

C++ Дружественная функция
Преобразование типа аргумента в тип класса и дружественная функция C++
Дружественная функция. Графы C++
Почему дружественная функция с перегруженным оператором << не имеет доступа к данным класса? C++
Переопределение операторов как член-класса и как дружественная функция C++
C++ Дружественная функция
Дружественная функция, объявлённая ранее вне пространства имён класса -> error LNK2019 в Visual Studio 2012 C++
C++ Шаблон класса и дружественная функция
C++ Дружественная функция
Дружественная функция-оператор, доступ к закрытым полям класса C++
C++ Дружественная функция
C++ Не вызывается дружественная функция

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1780 / 1155 / 223
Регистрация: 16.05.2013
Сообщений: 3,042
Записей в блоге: 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,994
18.06.2014, 17:39     Дружественная функция класса #3
можно сделать класс дружественным и тогда её использовать
mh-coder
24 / 23 / 3
Регистрация: 01.02.2014
Сообщений: 739
18.06.2014, 18:59  [ТС]     Дружественная функция класса #4
а разве таким способом friend void update_status(const int& , Car&); я не делаю функцию дружественной?
zss
Модератор
Эксперт С++
 Аватар для zss
6129 / 5732 / 1854
Регистрация: 18.12.2011
Сообщений: 14,652
Завершенные тесты: 1
18.06.2014, 21:38     Дружественная функция класса #5
C++
1
 friend void Mechanic::update_status(const int& , Car&);
Yandex
Объявления
18.06.2014, 21:38     Дружественная функция класса
Ответ Создать тему
Опции темы

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