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

Ошибки в работе программы с классами, наследованием и т.д - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Полиморфизм, Точка в трёхмерном пространстве http://www.cyberforum.ru/cpp-beginners/thread758385.html
Задание 1. 1. Опишите класс "Точка в 3-хмерном пространстве". Данные класса: координаты точки, цвет. Конструкторы класса: конструктор по умолчанию, конструктор произвольной точки. 2.Определите методы: ввод точки, вывод на экран, определение расстояния от точки до начала координат. 3. Объявите несколько объектов с использованием различных конструкторов, найдите их расстояния от...
C++ Создайте программу с классом student, который включает в себя данные о студентах, желающих получить места в общежитии. Создайте программу с классом student, который включает в себя данные о студентах, же¬лающих получить места в общежитии. Общежитие в первую очередь предоставляется тем студентам, у кого доход на члена семьи меньше двух минимальных зарплат. Класс включает в себя следующие данные-элементы: ► ФИО студента; ► номер группы (буква и четыре цифры); ► средний балл; ► доход на одного члена семьи.... http://www.cyberforum.ru/cpp-beginners/thread758379.html
C++ Вычислить вектор a={a1,a2,.,an}
Вычислить вектор a={a1,a2,...,an} , если ak=min ( xk,yk) , векторы x и y заданы.
C++ Из массива X1, X2, ., X30 получить массив Y1, Y2, …, Yn
Из массива X1, X2, ..., X30 получить массив Y1, Y2, …, Yn состоящий из элементов массива X, расположенных правее его максимального элемента.
C++ механизм перегрузки функций http://www.cyberforum.ru/cpp-beginners/thread758353.html
С помощью механизма перегрузки функций реализовать функции для вывода на экран (первый параметр – тип выводимого значения (самостоятельно разработать систему обозначений)). есть впринципе готовая, но выдаёт ошибки, исправьте пожалуйста по мере возможности.. #include "string.h" #include "iostream" #include "conio.h" #include "stdlib.h" #include "stdio.h"
C++ Сумма элементов матрицы лежащие выше главной диаганали ребятки помогите подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
11.01.2013, 02:19     Ошибки в работе программы с классами, наследованием и т.д
Самая крупная беда в коде с архитектурой и декомпозицией.
Не говоря уже о неправильной работе со строками, классами и т.п.

Всегда сначала необходимо выделять основные сущности с минимально возможным набором характеристик. Заодно покажу, как обеспечить простейшую работу со строками.
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
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <cstring>
#include <iostream>
 
/**
 * Класс, описывающий одного танцора
 * у танцора есть имя, возраст в годах и пол
 */
class Dancer {
 public:
  // конструктор для создания объекта
  Dancer(const char *name, int age, bool gender)
    : name(strcpy(new char[strlen(name) + 1], name)), age(age),
    gender(gender) {}
  // поскольку в классе есть динамическое поле name (указатель)
  // понадобится переопределить конструктор копирования,
  // оператор присваивания и деструктор:
  // конструктор копирования
  Dancer(const Dancer &other) 
    : name(strcpy(new char[strlen(other.name) + 1], other.name)),
    age(other.age), gender(other.gender) {}
  // оператор присваивания
  Dancer &operator=(const Dancer &other) {
    if (&other != this) {
      delete [] name;
      name = strcpy(new char[strlen(other.name) + 1], other.name);
      age = other.age;
      gender = other.gender;
    }
    return *this;
  }
  // деструктор
  virtual ~Dancer() {
    delete [] name;
  }
  // методы для получения данных о танцоре (aka геттеры или аксессоры)
  // получение имени танцора
  const char *getName() const {
    return name;
  }
  // получение возраста танцора
  int getAge() const {
    return age;
  }
  // получение пола танцора
  bool getGender() const {
    return gender;
  }
 private:
  char *name;  // имя танцора
  int age;     // возраст танцора
  bool gender; // пол танцора (0 -- мужской, 1 -- женский)
};
 
/**
 * Класс, описывающий пару танцоров
 */
class DancingPair {
 public:
  // конструктор для создания пары танцоров используя два объекта танцоров
  DancingPair(const Dancer &firstDancer, const Dancer &secondDancer) 
    : firstDancer(firstDancer), secondDancer(secondDancer) {}
  // методы для получения данных
  // получение первого танцора
  const Dancer &getFirstDancer() const {
    return firstDancer;
  }
  // получение второго танцора
  const Dancer &getSecondDancer() const {
    return secondDancer;
  }  
 private:
  Dancer firstDancer;  // первый танцор
  Dancer secondDancer; // второй танцор
};
 
/**
 * Класс, описывающий возрастную группу танцоров
 */
class AgeGroup {
 public:
  // конструктор для создания возрастной группы с использованием
  // имени группы, минимального и максимального возрастов для группы
  AgeGroup(const char *name, int minimumAge, int maximumAge)
    : name(strcpy(new char[strlen(name) + 1], name)), minimumAge(minimumAge),
    maximumAge(maximumAge) {}
  // поскольку в классе есть динамическое поле name (указатель),
  // понадобится переопределить конструктор копирования,
  // оператор присваивания и деструктор (по аналогии с классом Dancer):
  // конструктор копирования
  AgeGroup(const AgeGroup &other) 
    : name(strcpy(new char[strlen(other.name) + 1], other.name)),
    minimumAge(other.minimumAge), maximumAge(other.maximumAge) {}
  // оператор присваивания
  AgeGroup &operator=(const AgeGroup &other) {
    if (&other != this) {
      delete [] name;
      name = strcpy(new char[strlen(other.name) + 1], other.name);
      minimumAge = other.minimumAge;
      maximumAge = other.maximumAge;
    }
    return *this;
  }
  // деструктор
  virtual ~AgeGroup() {
    delete [] name;
  }
  // методы для получения данных о возрастной группе
  // получение имени танцора
  const char *getName() const {
    return name;
  }
  // получение минимального возраста
  int getMinimumAge() const {
    return minimumAge;
  }
  // получение максимального возраста
  int getMaximumAge() const {
    return maximumAge;
  }
  // проверка, входит ли танцор в возрастную группу
  bool isInGroup(const Dancer &dancer) {
    return dancer.getAge() >= getMinimumAge() &&
      dancer.getAge() < getMaximumAge();
  }
  // проверка, входит ли пара в возрастную группу
  // перегруженный метод.
  // пара входит в группу, если хотя бы один из танцоров
  // входит в группу
  bool isInGroup(const DancingPair &pair) {
    return isInGroup(pair.getFirstDancer()) ||
      isInGroup(pair.getSecondDancer());
  }
 private:
  char *name;     // название группы
  int minimumAge; // минимальный возраст для группы (включительно)
  int maximumAge; // максимальный возраст для группы (не включительно)
};
 
// для упрощения основного кода, перегруежн оператор "<<" для
// вывода объектов на экран с помощью "std::cout << Dancer;"
 
// перегруженый оператор для вывода танцора
std::ostream &operator<<(std::ostream &stream, const Dancer &dancer) {
  return stream << "Dancer{" <<
    "name='" << dancer.getName() << "'," <<
    "age=" << dancer.getAge() << "," <<
    "gender=" << (dancer.getGender() ? "female" : "male" ) << "}";
}
 
// перегруженый оператор для вывода пары танцоров
std::ostream &operator<<(std::ostream &stream, const DancingPair &pair) {
  return stream << "DancingPair{" <<
    "firstDancer=" << pair.getFirstDancer() << "," <<
    "secondDancer=" << pair.getSecondDancer() << "}";
}
 
// перегруженый оператор для вывода возрастной группы
std::ostream &operator<<(std::ostream &stream, const AgeGroup &ageGroup) {
  return stream << "AgeGroup{" <<
    "name='" << ageGroup.getName() << "'," <<
    "minimumAge=" << ageGroup.getMinimumAge() << "," <<
    "maximumAge=" << ageGroup.getMaximumAge() << "}";
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
 
  // создание нескольких возрастных групп
  AgeGroup ageGroups[] = {AgeGroup("Kids", 0, 14), AgeGroup("Juniors", 14, 18),
    AgeGroup("Amateurs", 18, 25)};
  // расчет количества созданых возрастных групп
  int numberOfAgeGroups = sizeof(ageGroups) / sizeof(AgeGroup);
 
  // танцевальная пара
  DancingPair pairIvanAndElena(Dancer("Ivan", 21, false),
    Dancer("Elena", 17, true));
 
  // вывод танцевальной пары на экран
  std::cout << pairIvanAndElena << std::endl;
  // вывод всех возрастных групп, в которых состоит пара, на экран
  for (int i = 0; i < numberOfAgeGroups; ++i) {
    // если пара состоит в группе
    if (ageGroups[i].isInGroup(pairIvanAndElena)) {
      // вывести группу на экран
      std::cout << ageGroups[i] << std::endl;
    }
  }
 
  std::cin.peek();
  return 0;
}
Если опишите поставленную перед вами задачу более подробно, получите более конкретный пример.
 
Текущее время: 00:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru