Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 4
Регистрация: 30.12.2009
Сообщений: 53
1

Дружественные функции

19.01.2011, 18:09. Показов 1311. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Помогите пожалуйста разобраться с задачей:

Создать классы:
1.Класс Машина (фирма, состояние, номер учета);
2.Класс Механик (имя, заработная плата);
3.Класс Менеджер (имя);
Описание предметной области – механик может менять состояние машины на «исправен». Инженер может менять номер учета машины и заработную плату механика.

Вот мой код:
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
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
#include<string.h>
#include<vcl.h>
#include<conio.h>
#include<iostream.h>
 
#pragma hdrstop
class mechanic;
class machine;
class engineer{
        public:
                engineer(char *);
                void SetNum(machine *, mechanic *);
        private:
                char name[20];
};
 
 
class mechanic{
        public:
                mechanic(char *, int);
                void SetZp(machine *,char *);
        private:
                char name[20];
                int zp;
};
 
class machine{
        public:
        machine(char *,char *,int );
        void show();
        friend void engineer::SetNum(machine *, mechanic *);
        friend void mechanic::SetZp(machine *,char *);
        private:
                char name[20];
                char sost[20];
                int num;
};
 
mechanic::mechanic(char *n, int z){
        strcpy(name,n);
        zp=z;
}
 
engineer::engineer(char *n){
        strcpy(name,n);
}
 
machine::machine(char *n,char *s,int m){
        strcpy(name,n);
        strcpy(sost,s);
        num=m;
}
void machine::show(){
        cout<<"\n___________\n";
        cout<<"Name:"<<name;
        cout<<"\nSost:"<<sost;
        cout<<"\nNumber:"<<num;
}
 
void engineer::SetNum(machine *n, mechanic *m){
        n->num=m->zp;
}
void mechanic::SetZp(machine *n,char *s){
        strcpy(n->sost,s);
}
#pragma argsused
int main(int argc, char* argv[])
{
 machine m1("My machine","Neispraven",1);
 engineer e1("Ivanov");
 mechanic me1("Petrov",500000);
 m1.show();
 e1.SetNum(&m1,&me1);
 m1.show();
 me1.SetZp(&m1,"Ispraven");
 m1.show();
 getch();
 return 0;
}
Проблема возникает на 61 строке. Что не правильно? Если не трудно, объясните где я ошиблась.

Заранее всем спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.01.2011, 18:09
Ответы с готовыми решениями:

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

дружественные функции
Тема: дружественные функции Напишите программу обращения слова. Помогите решить на С++

Дружественные функции
Создать класс «студент» (его фамилия, имя, год рождения и год поступления). Написать: а)...

Дружественные функции С++
Здравствуйте, помогите пожалуйста решить задачку с помощью дружественных функций: Считайте текст и...

5
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
19.01.2011, 19:37 2
Цитата Сообщение от Anastasiya_1692 Посмотреть сообщение
Проблема возникает на 61 строке.
а сообщение об ошибке, зачем скрываете?
0
1 / 1 / 4
Регистрация: 30.12.2009
Сообщений: 53
19.01.2011, 20:07  [ТС] 3
Ошибка следующая:

[C++ Error] Unit1.cpp(65): E2247 'mechanic::zp' is not accessible
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
19.01.2011, 20:21 4
Цитата Сообщение от Anastasiya_1692 Посмотреть сообщение
'mechanic::zp' is not accessible
и что не понятно?
0
1 / 1 / 4
Регистрация: 30.12.2009
Сообщений: 53
19.01.2011, 20:25  [ТС] 5
Как исправить, чтобы программа работала
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
19.01.2011, 21:02 6
Цитата Сообщение от Anastasiya_1692 Посмотреть сообщение
friend void engineer::SetNum(machine *, mechanic *);
* * * * friend void mechanic::SetZp(machine *,char *);
смысл этого вообще не понятен.
добавьте в machine метод SetNum(), а в mechanic метод int GetZp().
тогда ваша проблема решится так:
C++
1
2
3
void engineer::SetNum(machine *n, mechanic *m){
        n->SetNum(m->GetZp());
}
но все равно не понял смысла вашего кода. все можно решить много проще.

Добавлено через 17 минут
Anastasiya_1692, или у Вас задание на дружественные классы?

Добавлено через 1 минуту
в названии: "Дружественные функции"
пора в отпуск

Добавлено через 18 минут
вот ваша задача:
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
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
#include <iostream>
#include <string>
 
struct machine;
struct mechanic;
 
enum state { ok, bad };
 
/***************************************************************************/
 
struct engineer {
   engineer(const std::string& name)
      :name(name)
   {}
 
   void set_machine_num(machine* m, int n);
   void set_mechanic_zp(mechanic*, int zp);
private:
   std::string name;
};
 
/***************************************************************************/
 
struct mechanic {
   friend void engineer::set_mechanic_zp(mechanic*, int zp);
 
   mechanic(const std::string& name, int zp)
      :name(name),
      zp(zp)
   {}
 
   void set_machine_state(machine*, state);
 
   void show(std::ostream& os = std::cout) {
   }
 
private:
   std::string name;
   int zp;
};
 
/***************************************************************************/
 
struct machine {
   friend void engineer::set_machine_num(machine*, int);
   friend void mechanic::set_machine_state(machine*, state);
   
   machine(const std::string& name, state st, int num)
      :name(name),
      st(st),
      num(num)
   {}
   
   void show(std::ostream& os = std::cout) {
   }
 
private:
   std::string name;
   state st;
   int num;
};
 
/***************************************************************************/
 
void engineer::set_machine_num(machine* m, int n) {
   m->num = n;
}
 
void engineer::set_mechanic_zp(mechanic* m, int zp) {
   m->zp = zp;
}
 
void mechanic::set_machine_state(machine* m, state st) {
   m->st = st;
}
 
/***************************************************************************/
 
int main() {
   machine mach("My machine", bad, 1);
   mechanic mech("Ivanov", 45000);
   mech.set_machine_state(&mach, ok);
   engineer ingin("Petrov");
   ingin.set_machine_num(&mach, 2);
   ingin.set_mechanic_zp(&mech, 50000);
}
 
/***************************************************************************/
http://liveworkspace.org/code/... f325f3a62e

только реализуйте методы show() если нужно.
1
19.01.2011, 21:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2011, 21:02
Помогаю со студенческими работами здесь

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

Дружественные функции
С дружественными классами разобрался, спасибо. А теперь ф-ции. Киньте пожалуста простой пример:...

Дружественные функции
День добрый. class Distance { private: int fut; int inch; public:...

Дружественные функции
Добрый день. Подскажите как правильно запихнуть данные код в тело дружественной функции. Моё...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru