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

Иерархия классов .... - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.92
leloman
0 / 0 / 0
Регистрация: 27.05.2011
Сообщений: 8
01.06.2011, 01:01     Иерархия классов .... #1
Добрый вечер Всем !!! ))) У меня возникли некоторые трудности с написанием программы, имеющей следующие особенности:
1) Определить иерархию классов 2)Определить в классе статическую компоненту - указатель на начало связанного списка объектов и статическую функцию для просмотра списка 3)Реализовать классы 4) Сделать соответствующие методы не виртуальными и посмотреть что будет. 5) Реализовать вариант когда объект добавляется в список при создании т.е. в конструкторе. Вроде бы ничего сложного, но в то же время для меня неясен п2 и п5 - помогите его побороть ))) Вот моя иерархия - помогите со связанным списком пожалуйста !!! )))
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// class ierarchy.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <conio.h>
 
using namespace std;
const int LEN = 80;
 
class employee
{
private:
    char name [LEN];
    unsigned long number;
public:
    void getdata()
    {
        cout<<"\nВведите фамилию:";cin>>name;
        cout<<"\nВведите номер:";cin>>number;
    }
    void putdata() const
    {
        cout<<"\nФамилия:"<<name;
        cout<<"\nНомер:"<<number;
    }
};
 
class person:public employee
{
private:
    char title[LEN];
    double dues;
public:
    void getdata()
    {
        employee::getdata();
        cout<<"Введите должность:";cin>>title;
        cout<<"Введите номер ИНН:";cin>>dues;
    }
    void putdata()const
    {
        employee::putdata();
        cout<<"\nДолжность:"<<title;
        cout<<"\nНомер ИНН:"<<dues;
    }
};
 
class worker:public employee
{
private:
    int pubs;
public:
    void getdata()
    {
    employee::getdata();
    cout<<"Введите рабочее время(в сутки):";cin>>pubs;
    }
    void putdata() const
    {
    employee::putdata();
    cout<<"\nВремя:"<<pubs;
    }
};
 
class ingeneer:public employee
{
};
 
int main()
{
    setlocale(LC_ALL,"Russian");
    person m1,m2;
    worker s1;
    ingeneer l1;
 
    cout<<endl;
    cout<<"\nВвод информации о первом служащем";
    m1.getdata();
 
    cout<<"\nВвод информации о втором служащем";
    m2.getdata();
    
    cout<<"\nВвод информации о рабочем";
    s1.getdata();
 
    cout<<"\nВвод информации о инженере";
    l1.getdata();
 
    cout<<"\nИнформация о первом служащем:";
    m1.putdata();
 
    cout<<"\nИнформация о втором служащем";
    m2.putdata();
 
    cout<<"\nИнформация о рабочем";
    s1.putdata();
 
    cout<<"\nИнформации о инженере";
    l1.putdata();
    cout<<endl;
    getch();
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2011, 01:01     Иерархия классов ....
Посмотрите здесь:

C++ иерархия классов
иерархия классов C++
C++ иерархия классов
C++ Иерархия классов
иерархия классов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
01.06.2011, 09:51     Иерархия классов .... #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от leloman Посмотреть сообщение
Определить иерархию классов
Каких классов-то?! Person -> Worker -> Engineer?
Цитата Сообщение от leloman Посмотреть сообщение
Сделать соответствующие методы не виртуальными
КАКИЕ соответствующие методы? Придумайте методы, которые могут быть виртуальными для этих классов.
Цитата Сообщение от leloman Посмотреть сообщение
Определить в классе статическую компоненту - указатель на начало связанного списка объектов и статическую функцию для просмотра списка
ОМФГ. Я могу себе представить статический связный список, я могу себе представить статическую функцию для просмотра этого списка, но я совершенно не могу себе представить, нахрена!? Отклоняясь от темы. Статические методы и объекты класса будут одинаковы и одинаково доступны для всех экземпляров классов. В результате это несет приблизительный смысл "у всех людей есть список со всеми людьми". На кой пёс?!
Цитата Сообщение от leloman Посмотреть сообщение
У меня возникли некоторые трудности с написанием программы, имеющей следующие особенности
Это не "особенности", это задание, и это не задание, это лютый трындец. Либо вы чего-то не договариваете.
leloman
0 / 0 / 0
Регистрация: 27.05.2011
Сообщений: 8
01.06.2011, 21:03  [ТС]     Иерархия классов .... #3
lemegeton, Если вам нетрудно, напишите в аську пожалуйста !!! 585639187 буду вам признателен !!!

Добавлено через 4 минуты
P.S. этот лютый 3%^дец - обычная лабораторная, методические указания для которой либо отсутствуют либо ооочень далеки от самой работы ...
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 21:23     Иерархия классов .... #4
lemegeton
+1
Хранить список объектов класса в статическом поле этого же класса - это мего жесть
leloman
0 / 0 / 0
Регистрация: 27.05.2011
Сообщений: 8
02.06.2011, 00:33  [ТС]     Иерархия классов .... #5
В том то и дело - я не знаю как это всё дело осуществить ... помогите пожалуйста !!! в долгу не останусь ...
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,269
02.06.2011, 01:05     Иерархия классов .... #6
Друзья, коль скоро сия херь имеет решение, надо решать, ибо это всего лишь упражнение, а практической пользы здесь ни одно задание не несёт.
leloman
0 / 0 / 0
Регистрация: 27.05.2011
Сообщений: 8
02.06.2011, 01:37  [ТС]     Иерархия классов .... #7
ммм я только за =)) у нас лабораторные работы по программированию сводятся тупо к решению "шаблонных бесполезных программ" поэтому и развития нет никакого ... а самому очень сложно это всё освоить .... ребят, помогите с этим !!! если нужно, вот полная версия требований работы:
1) Определить иерархию классов (служащий, персона, рабочий, инженер)
2) Определить в классе статическую компоненту - указатель на начало связанного списка объектов и статическую функцию для просмотра списка
3) Реализовать классы
4) Написать демонстрационную программу, в которой создаются объекты различных классов и помещаются в список после чего список просматривается.
5) Сделать соответствующие методы не виртуальными и посмотреть что будет.
6) Реализовать вариант, когда объект добавляется в список при создании т.е. в конструкторе.

Вот полностью написал что требуют от нас преподы в методичке ... но толкового ничего не объясняют ... или может я чего то недопонимаю...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
02.06.2011, 10:29     Иерархия классов .... #8
leloman, Интересно... Каждый служащий это персона согласен... Но вот каждая персона - служащий... Неверное наследование.
А так же не каждая персона - рабочий, вот иерархия персона -> служащий -> рабочий еще куда ни шло... Но инженера наследовать от рабочего... Ну что ж. Пронаследуем колесо от автомобиля...
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
02.06.2011, 11:31     Иерархия классов .... #9
Цитата Сообщение от leloman Посмотреть сообщение
Реализовать вариант, когда объект добавляется в список при создании т.е. в конструкторе.
*FACEPALM*

Ну вот какой-то такой бред. Ток аккуратней с динамическими объектами - не забывайте удалять вручную.
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
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
#include <iostream>
#include <string>
 
struct NodeBase {
  NodeBase *next;
  NodeBase *prev;
  NodeBase() : next(this), prev(this) {}
  NodeBase(NodeBase *next_, NodeBase *prev_) : next(next_), prev(prev_) {
    next_->prev = prev_->next = this;
  }
  virtual ~NodeBase() {
    next->prev = prev;
    prev->next = next;
  }
};
 
struct Node;
 
class Person {
 public:
  explicit Person(const std::string &name);
  virtual ~Person();
  std::string &name() { return name_; }
  void name(const std::string &name) { name_ = name; }
  virtual void print() {
    std::cout << std::endl
              << "Person:" << std::endl
              << "Name: " << name() << std::endl;
  }
  static NodeBase base;
  static void print_all();
 private:
  Person(const Person &other);            // не позволять копирование
  Person &operator=(const Person &other); // не позволять копирование
  std::string name_;
};
 
NodeBase Person::base;
 
struct Node: public NodeBase {
  Node() : NodeBase() {}
  Node(NodeBase *next_, NodeBase *prev_, Person *person_)
    : NodeBase(next_, prev_), person(person_) {}
  Person *person;
};
 
void Person::print_all() {
  NodeBase *current = base.next;
  while (current != &base) {
    (static_cast<Node*>(current))->person->print();
    current = current->next;
  }
}
Person::Person(const std::string &name) : name_(name) {
  new Node(&base, base.prev, this);
}
Person::~Person() {
  NodeBase *node = base.next;
  while (static_cast<Node*>(node)->person != this && node != &base)
    node = node->next;
  if (node != &base)
    delete node;
}
 
 
class Worker: public Person {
 public:
  Worker(const std::string &name, const std::string &office)
    : Person(name), office_(office) {}
  std::string &office() { return office_; }
  void office(const std::string &office) { office_ = office; }
  virtual void print() {
    std::cout << std::endl
              << "Worker:" << std::endl
              << "Name: " << name() << std::endl
              << "Office: " << office() << std::endl;
  }
 private:
  Worker(const Worker &other);            // не позволять копирование
  Worker &operator=(const Worker &other); // не позволять копирование
  std::string office_;
};
 
class Engineer: public Worker {
 public:
  Engineer(const std::string &name, const std::string &office, size_t los)
    : Worker(name, office), los_(los) {}
  size_t los() { return los_; }
  void los(size_t los) { los_ = los; }
  virtual void print() {
    std::cout << std::endl
              << "Ingeneer:" << std::endl
              << "Name: " << name() << std::endl
              << "Office: " << office() << std::endl
              << "Length of service: " << los() << "year(s)." << std::endl;
  }
 private:
  Engineer(const Engineer &other);
  Engineer &operator=(const Engineer &other);
  size_t los_;
};
 
int main(int argc, char *argv[]) {
  // статические работники
  Person a("Ivan");
  Worker b("Kolya", "204-a");
  Engineer c("Vasya", "205-b", 15);
 
  // динамический работник
  Person *d = new Worker("Petya", "204-c"); // создание работника
  a.print_all(); // просмотр списка. Petya имеется.
  delete d;      // удаление работника
  b.print_all(); // работник "Petya" пропал из списка.
  return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от leloman Посмотреть сообщение
5) Сделать соответствующие методы не виртуальными и посмотреть что будет.
Во-первых, так и не установлено, какие методы "соответствующие".
Во-вторых, если сделать методы не виртуальными, будет очень непонятно.

Добавлено через 27 минут
Цитата Сообщение от leloman Посмотреть сообщение
в долгу не останусь ...
Кстати, давно хотел посмотреть, как не остаются в долгу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2011, 11:42     Иерархия классов ....
Еще ссылки по теме:

Иерархия классов C++
Иерархия классов C++
Иерархия классов С++ C++

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

Или воспользуйтесь поиском по форуму:
leloman
0 / 0 / 0
Регистрация: 27.05.2011
Сообщений: 8
02.06.2011, 11:42  [ТС]     Иерархия классов .... #10
Цитата Сообщение от lemegeton Посмотреть сообщение
*FACEPALM*

Ну вот какой-то такой бред. Ток аккуратней с динамическими объектами - не забывайте удалять вручную.
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
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
#include <iostream>
#include <string>
 
struct NodeBase {
  NodeBase *next;
  NodeBase *prev;
  NodeBase() : next(this), prev(this) {}
  NodeBase(NodeBase *next_, NodeBase *prev_) : next(next_), prev(prev_) {
    next_->prev = prev_->next = this;
  }
  virtual ~NodeBase() {
    next->prev = prev;
    prev->next = next;
  }
};
 
struct Node;
 
class Person {
 public:
  explicit Person(const std::string &name);
  virtual ~Person();
  std::string &name() { return name_; }
  void name(const std::string &name) { name_ = name; }
  virtual void print() {
    std::cout << std::endl
              << "Person:" << std::endl
              << "Name: " << name() << std::endl;
  }
  static NodeBase base;
  static void print_all();
 private:
  Person(const Person &other);            // не позволять копирование
  Person &operator=(const Person &other); // не позволять копирование
  std::string name_;
};
 
NodeBase Person::base;
 
struct Node: public NodeBase {
  Node() : NodeBase() {}
  Node(NodeBase *next_, NodeBase *prev_, Person *person_)
    : NodeBase(next_, prev_), person(person_) {}
  Person *person;
};
 
void Person::print_all() {
  NodeBase *current = base.next;
  while (current != &base) {
    (static_cast<Node*>(current))->person->print();
    current = current->next;
  }
}
Person::Person(const std::string &name) : name_(name) {
  new Node(&base, base.prev, this);
}
Person::~Person() {
  NodeBase *node = base.next;
  while (static_cast<Node*>(node)->person != this && node != &base)
    node = node->next;
  if (node != &base)
    delete node;
}
 
 
class Worker: public Person {
 public:
  Worker(const std::string &name, const std::string &office)
    : Person(name), office_(office) {}
  std::string &office() { return office_; }
  void office(const std::string &office) { office_ = office; }
  virtual void print() {
    std::cout << std::endl
              << "Worker:" << std::endl
              << "Name: " << name() << std::endl
              << "Office: " << office() << std::endl;
  }
 private:
  Worker(const Worker &other);            // не позволять копирование
  Worker &operator=(const Worker &other); // не позволять копирование
  std::string office_;
};
 
class Engineer: public Worker {
 public:
  Engineer(const std::string &name, const std::string &office, size_t los)
    : Worker(name, office), los_(los) {}
  size_t los() { return los_; }
  void los(size_t los) { los_ = los; }
  virtual void print() {
    std::cout << std::endl
              << "Ingeneer:" << std::endl
              << "Name: " << name() << std::endl
              << "Office: " << office() << std::endl
              << "Length of service: " << los() << "year(s)." << std::endl;
  }
 private:
  Engineer(const Engineer &other);
  Engineer &operator=(const Engineer &other);
  size_t los_;
};
 
int main(int argc, char *argv[]) {
  // статические работники
  Person a("Ivan");
  Worker b("Kolya", "204-a");
  Engineer c("Vasya", "205-b", 15);
 
  // динамический работник
  Person *d = new Worker("Petya", "204-c"); // создание работника
  a.print_all(); // просмотр списка. Petya имеется.
  delete d;      // удаление работника
  b.print_all(); // работник "Petya" пропал из списка.
  return 0;
}
Добавлено через 1 минуту

Во-первых, так и не установлено, какие методы "соответствующие".
Во-вторых, если сделать методы не виртуальными, будет очень непонятно.

Добавлено через 27 минут

Кстати, давно хотел посмотреть, как не остаются в долгу.
Спасибо огромное !!! =)))) дайте свою аську - я напишу - разберёмся )))

Добавлено через 8 минут
Цитата Сообщение от leloman Посмотреть сообщение
Спасибо огромное !!! =)))) дайте свою аську - я напишу - разберёмся )))
моя 585-639-187 - писал выше =))
Yandex
Объявления
02.06.2011, 11:42     Иерархия классов ....
Ответ Создать тему
Опции темы

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