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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычисление выражения, использование обратной польской записи http://www.cyberforum.ru/cpp-beginners/thread309735.html
приветствую, люди. можете помочь с реализацией вычисления выражения с помощью обратной польской записи на c++. посоветуйте сто нибудь. Может есть исходники?
C++ матрицы, string const, функции с перем. кол. параметров. Немного завис... Прошу извинить заранее за кривой код, язык начал учить 2 дня назад... Ввести стринговую константу. Превратить её в трёхдиагональную матрицу матрицю (присвоить нули соотв. элементам). Транспонировать матрицу отн. средины (строка). Конкатенировать две строки полученной матрицы. Я не очень понял условие, буду благодарен за помощь... Написать функцию sum с переменным числом параметров,... http://www.cyberforum.ru/cpp-beginners/thread309719.html
C++ Найти в каждом первое слово и напечатать их в строку через пробел
Доброго времени суток. Помогите, пожалуйста, написать программу на Си. Задание: Даны N предложений. Найти в каждом первое слово и напечатать их в строку через пробел.
C++ Доделать курсовую!
Программа,открывающая заставку и программу вычисляющую интеграл. компилятор BORLAND C++ 3.1 #include <iostream.h> #include <process.h> #include <conio.h> #include <stdio.h> #include <fstream.h> #include <stdlib.h> #include <dos.h>
C++ Тема:Конструкторы и перегрузка оперций (Массивы и константы в классе) http://www.cyberforum.ru/cpp-beginners/thread309678.html
Предусловие: Дополнительно к требуемым в задании операциям перегрузить операцию индексирования . Максимально возможный размер массива задать константой. В отдельном поле size должно хранится максимальное для данного объекта количество элементво массива; реализовать метод size(), возвращающий установленную длинну. Если количество элементво массива изменяется во время работы, определить в классе...
C++ Переместить арифметические знаки вконец Здравствуйте. Такая задача: при вводе к примеру строки 2+3-4 программа должна переместить арифметические знаки вконец, то есть должно получится 234+-. Вод код моей программы (все вроде работает, только она меняет местами знаки). Помогите это исправить. #include <iostream> #include <string.h> using namespace std; char arr; int size=0; int main() { подробнее

Показать сообщение отдельно
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
02.06.2011, 11:31
Цитата Сообщение от 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 Посмотреть сообщение
в долгу не останусь ...
Кстати, давно хотел посмотреть, как не остаются в долгу.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru