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

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

Восстановить пароль Регистрация
 
Anastasiya_1692
 Аватар для Anastasiya_1692
1 / 1 / 1
Регистрация: 30.12.2009
Сообщений: 53
19.01.2011, 18:09     Дружественные функции #1
Доброго времени суток! Помогите пожалуйста разобраться с задачей:

Создать классы:
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 строке. Что не правильно? Если не трудно, объясните где я ошиблась.

Заранее всем спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2011, 18:09     Дружественные функции
Посмотрите здесь:

C++ дружественные функции
C++ Дружественные функции
C++ Дружественные функции
C++ дружественные функции
C++ Дружественные функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
19.01.2011, 19:37     Дружественные функции #2
Цитата Сообщение от Anastasiya_1692 Посмотреть сообщение
Проблема возникает на 61 строке.
а сообщение об ошибке, зачем скрываете?
Anastasiya_1692
 Аватар для Anastasiya_1692
1 / 1 / 1
Регистрация: 30.12.2009
Сообщений: 53
19.01.2011, 20:07  [ТС]     Дружественные функции #3
Ошибка следующая:

[C++ Error] Unit1.cpp(65): E2247 'mechanic::zp' is not accessible
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
19.01.2011, 20:21     Дружественные функции #4
Цитата Сообщение от Anastasiya_1692 Посмотреть сообщение
'mechanic::zp' is not accessible
и что не понятно?
Anastasiya_1692
 Аватар для Anastasiya_1692
1 / 1 / 1
Регистрация: 30.12.2009
Сообщений: 53
19.01.2011, 20:25  [ТС]     Дружественные функции #5
Как исправить, чтобы программа работала
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 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/b6cef4...787ff325f3a62e

только реализуйте методы show() если нужно.
Yandex
Объявления
19.01.2011, 21:02     Дружественные функции
Ответ Создать тему
Опции темы

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