Аватар для Romich41
16 / 16 / 1
Регистрация: 01.11.2009
Сообщений: 188

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов

28.02.2010, 13:19. Показов 12656. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или сказать где их можно посмотреть=) Мне нужно просто решить следующие задачи:
Множественное наследование:
Задание 1. Создать иерархию типов, описывающую – студента, отца семейства и студента-отца
семейства. Классы должны конструкторы, включая конструктор копирования, виртуальные
деструкторы, перегруженные функции вывода в поток и ввода в поток.
Задание 2. Создать иерархию типов, описывающую – человека, студента, отца семейства и
студента-отца семейства. Использовать виртуальные базовые классы.
Перегрузка функций:
Сстек. Дополнительно перегрузить следующие операции:
«+» − добавить элемент в стек;
«-» − извлечь элемент из стека;
«bool()» − проверка, пустой ли стек.
Перегрузка операторов:
Задание 1. Создать класс вещественных чисел (double). Определить оператор --, как функцию-
член и ++ как дружественную функцию.
Задание 2. Создать класс вещественных чисел (double). Определить оператор -, как функцию-
член и + как дружественную функцию.
Задание 3. Создать класс вектор, содержащий ссылку на unsigned long, размерность вектора и
переменную ошибки. Класс имеет конструкторы по умолчанию, конструктор с одним и
двумя параметрами, конструктор копирования и деструктор. Определить оператор +, - , * , -
как дружественные функции, =, +=, -=, *=,[] - как функции-члены. Определить операторы =,
+, - , *, +=, -=, *= с типа unsigned long, операторы ++ и --. Определить функцию печати.
Сравнить время работы созданного класса и встроенного массива типа unsigned long.
Перегрузить операторы вывода и ввода в поток.
Задание 4. Создать класс матриц, содержащий ссылку на unsigned long, число строк и столбцов
и состояние ошибки. Определить конструкторы по умолчанию, конструктор с одним и с
двумя параметрами, конструктор копирования, деструктор. Определить операторы =, +, -, +=,
-=, *., *= с объектами этого класс, с unsigned long и с вектором, определенном в задании 10.
Определить оператор [] так, чтобы обращение [][] к элементам имело смысл, аналогичный
встроенному. Перегрузить операторы вывода и ввода в поток.
Использование дружественных функций и классов:
Задание 1. Создать класс длинных целых чисел. Класс имеет конструктор по умолчанию,
конструктор – преобразующий long в объект класса. Определить оператор преобразования
объекта типа длинных целых чисел в число типа long. Создать класс целых чисел.
Определить взаимное преобразование с классом длинных целых чисел.
Задание 2. Создать класс целых чисел integer. Определить перегруженную функцию,
возвращающую максимальное из двух аргументов. Функция не является членом класса
целых чисел. Перегруженные функции имеют аргументы типа int, double, integer. Тело
перегруженных функций должны быть одинаковыми.
Задание 3. Создать два класса: вещественные (float) и вектор (float*). Определить конструкторы
– по умолчанию, с параметром, для класса вектор с двумя параметрами, копирования,
деструкторы. Определить функцию умножения вектора на float как дружественную.
Использование шаблонов классов:
Класс − однонаправленный список list. Дополнительно перегрузить следующие
операции:
«[]» − доступ к элементу в заданной позиции, например:
Type c;
int i;
list L;
c=L[i];
«+» − объединить два списка;
«!=» − проверка на неравенство.
ПОМОГИТЕ ПЛИЗ ВСЕМ ЧЕМ МОЖИТЕ...УМОЛЯЮ!!!=)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.02.2010, 13:19
Ответы с готовыми решениями:

Множественное наследование с использованием абстрактных базовых классов, файлового ввода-вывода с применением потоков С++, функций обработки исключи
Создать программу с абстрактным базовым классом и множественным наследованием, реализовать в нем: • конструктор, • деструктор, ...

Приведите ситуации когда использование классов лучше структур и функций
Не соображу, зачем нужны классы? Когда их применение предпочтительнее использования структур и функций и почему?

Шаблоны классов, перегрузка операторов
Задание:Реализовать шаблон классов Array. Перегрузить операторы присваивания =, ввода >> и вывода << (предусмотреть обработку...

5
 Аватар для Romich41
16 / 16 / 1
Регистрация: 01.11.2009
Сообщений: 188
01.03.2010, 15:17  [ТС]
Так почему никто не хочет помочь???????=(
Со множественным наследованием я уже разобрался
Задание 1,2 я сделал=)
Кидаю код задания 2 ...если кому понадобиться=)
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
#include <iostream> 
#include <string.h> 
#include <Windows.h> 
 
// подключаем пространство имен std, в котором 
// реализованы стандартные потоки ввода/вывода 
using namespace std;
class Human { 
protected: 
  int x,y; 
public: 
  Human() // пустой конструктор 
  { 
    x=0;  
    y=0; 
  } 
  Human(int Rost,int Ves) { // конструктор с параметрами 
    x=Rost; 
    y=Ves; 
  } 
  Human(Human &human) { // конструктор копирования 
    x=human.getRost(); 
    y=human.getVes(); 
  } 
  // получение значений 
  int getRost() { 
    return x; 
  } 
  int getVes() { 
    return y; 
  } 
  // ввод/вывод 
  virtual void input() { 
    cout << "Rost="; cin >> x; 
    cout << "Ves="; cin >> y; 
  } 
  virtual void print() { 
    cout << "Rost=" << x << " Ves=" << y << endl; 
  } 
}; 
 
class Stydent:public Human { 
protected: 
  int x2,y2; 
public: 
  Stydent():Human() // пустой конструктор 
  { 
    x2=0;
    y2=0;
  } 
  Stydent(int Rost,int Ves, int Age, int HappyNomber):Human(Rost,Ves) { // конструктор с параметрами 
    x2=Age;
    y2=HappyNomber;
  } 
  Stydent(Stydent &stydent):Human(stydent) { // конструктор копирования 
    x2=stydent.getAge(); 
    y2=stydent.getHappyNomber();
  } 
  // получение значений 
  int getAge() { 
    return x2; 
  }
  int getHappyNomber() { 
    return y2; 
  }
  // ввод/вывод 
  void input() {
    Human::input();
    cout << "Age="; cin >> x2; 
    cout << "HappyNomber="; cin >> y2;
  } 
  void print() { 
    cout << "Rost=" << x << " Ves=" << y << " Age="<< x2 << " HappyNomber="<< y2 << endl; 
  } 
}; 
 
class OtecSemeustva:public Stydent { 
protected: 
  int x3,y3; 
public: 
  OtecSemeustva():Stydent() // пустой конструктор 
  { 
    x3=0;
    y3=0;
  } 
OtecSemeustva(int Rost,int Ves, int Age, int HappyNomber, int Kol_voDeteu, int Kol_voMoney):Stydent(Rost,Ves,Age,HappyNomber) { // конструктор с параметрами 
    x3=Kol_voDeteu;
    y3=Kol_voMoney;
  } 
OtecSemeustva(OtecSemeustva &t):Stydent(t) { // конструктор копирования 
    x3=t.getDeteu(); 
    y3=t.getMoney();
  } 
  // получение значений 
  int getDeteu() { 
    return x3; 
  }
  int getMoney() { 
    return y3; 
  }
  // ввод/вывод 
  void input() {
    Human::input();
    cout << "Kol_voDeteu="; cin >> x3; 
    cout << "Kol_voMoney="; cin >> y3;
  } 
  void print() { 
    cout << "Rost=" << x << " Ves=" << y << " Age="<< x2 << " HappyNomber="<< y2 << " Kol_voDeteu=" << x3 << " Kol_voMoney" << y3 << endl; 
  } 
}; 
 
class StydentOtecSemeustva:public Stydent { 
protected: 
  int x3,y3,z; 
public: 
  StydentOtecSemeustva():Stydent() // пустой конструктор 
  { 
    x3=0;
    y3=0;
  } 
StydentOtecSemeustva(int Rost,int Ves, int Age, int HappyNomber, int Kol_voDeteu, int Kol_voMoney):Stydent(Rost,Ves,Age,HappyNomber) { // конструктор с параметрами 
    x3=Kol_voDeteu;
    y3=Kol_voMoney;
  } 
StydentOtecSemeustva(StydentOtecSemeustva &t):Stydent(t) { // конструктор копирования 
    x3=t.getDeteu(); 
    y3=t.getMoney();
  } 
  // получение значений 
  int getDeteu() { 
    return x3; 
  }
  int getMoney() { 
    return y3; 
  }
  // ввод/вывод 
  void input() {
    Human::input();
    cout << "Kol_voDeteu="; cin >> x3; 
    cout << "Kol_voMoney="; cin >> y3;
    cout << "IQ="; cin >> z;
  } 
  void print() { 
    cout << "Rost=" << x << " Ves=" << y << " Age="<< x2 << " HappyNomber="<< y2 << " Kol_voDeteu=" << x3 << " Kol_voMoney=" << y3<< "IQ="<< z <<endl; 
  } 
}; 
 
 
 
 
 
int main() { 
 // инициализация класса с помощью пустого конструктора 
 
    Human *cl=NULL;
 
 printf("1-Human\n2-Stydent\n3-OtecSemeustva\n4-StydentOtecSemeustva\n");
 int ik;
 scanf("%i",&ik);
 switch (ik) 
 {
case 1: 
        { 
        cl=new Human();
        break;
        
        }
case 2: 
        { 
            cl=new Stydent();
         break;
        }
case 3: 
        { 
            cl=new OtecSemeustva();
         break;
        }
case 4: 
        { 
            cl=new StydentOtecSemeustva();
         break;
        }
 
 
 }
 cl->input();
 cl->print();
 delete cl;
  return 0; 
}
3
 Аватар для ds102061
2 / 2 / 4
Регистрация: 13.10.2010
Сообщений: 167
13.05.2013, 11:18
а можете показать программу 1-го задания?
0
 Аватар для lemegeton
4901 / 2694 / 920
Регистрация: 29.11.2010
Сообщений: 5,782
13.05.2013, 21:41
Второе задание делается не так. Там надо создать робмовидную иерархию классов используя, очевидно, виртуальное наследование.

Можно, например, так.
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 <cstring>
 
/**
 * Виртуальный базовый класс.
 * Ничего лучше не придумал.
 */
class Printable {
 public:
  virtual void print(std::ostream &) const = 0;
};
 
class Human : virtual public Printable {
 public:
  Human() : name(0) {}
  Human(const char *name)
    : name(strcpy(new char[strlen(name) + 1], name)) {}
  Human(const Human &human)
    : name(strcpy(new char[strlen(name) + 1], human.getName())) {}
  Human &operator=(const Human &human) {
    if (this != &human) {
      setName(human.getName());
    }
    return *this;
  }
  virtual ~Human() {
    delete [] name;
  }
  void setName(const char *name) {
    delete [] this->name;
    this->name = strcpy(new char[strlen(name) + 1], name);
  }
  const char *getName() const { return name; }
  virtual void print(std::ostream &stream) const {
    stream << "Human{name='" << getName() << "'}";
  }
 private:
  char *name;
};
 
// виртуальное наследование
class Student : virtual public Human {
 public:
  Student() : Human(), institute(0) {}
  Student(const char *name, const char *institute) : Human(name),
    institute(strcpy(new char[strlen(institute) + 1], institute)) {}
  Student(const Student &s) : Human(s.getName()),
    institute(strcpy(new char[strlen(s.getInstitute()) + 1], s.getInstitute())) {}
  Student &operator=(const Student &s) {
    if (this != &s) {
      setName(s.getName());
      setInstitute(s.getInstitute());
    }
    return *this;
  }
  void setInstitute(const char *institute) {
    delete [] this->institute;
    this->institute = strcpy(new char[strlen(institute) + 1], institute);
  }
  const char *getInstitute() const { return institute; }
  virtual void print(std::ostream &stream) const {
    stream << "Student{name='" << getName() << "',"
      "institute='" << getInstitute() << "'}";
  }
 private:
  char *institute;
};
 
// виртуальное наследование
class Father : virtual public Human {
 public:
  Father() : Human(), numberOfChildren(1) {}
  Father(const char *name, int numberOfChildren) : Human(name), 
    numberOfChildren(numberOfChildren) {}
  int getNumberOfCildren() const { return numberOfChildren; }
  void setNumberOfChildren(int numberOfChildren) {
    this->numberOfChildren = numberOfChildren;
  }
  virtual void print(std::ostream &stream) const {
    stream << "Father{name='" << getName() << "',"
      "numberOfChildren=" << getNumberOfCildren() << "}";
  }
 private:
  int numberOfChildren;
};
 
class StudentFather : public Student, public Father {
 public:
  StudentFather() : Student(), Father() {}
  StudentFather(const char *name, const char *institute, int numberOfChildren)
    : Student(), Father() {
    setName(name);
    setInstitute(institute);
    setNumberOfChildren(numberOfChildren);
  }
  virtual void print(std::ostream &stream) const {
    stream << "StudentFather{name='" << getName() << "',"
      "institute=" << getInstitute() << "'," <<
      "numberOfChildren=" << getNumberOfCildren() << "}";
  }
};
 
// упрощение вывода на печать и демонстрация позднего связывания
// виртуального базового класса.
std::ostream &operator<<(std::ostream &stream, const Printable &p) {
  p.print(stream);
  return stream;
}
 
int main(int argc, char *argv[]) {
  Father f("Ivan", 2);
  Student s("Ivan", "MIT");
  StudentFather sf("Ivan", "MIT", 2);
  std::cout << f << std::endl << s << std::endl << sf << std::endl;
}
Добавлено через 5 минут
Забыл про конструктор копирования и оператор присваивания у производного класса. Добавьте сами.
0
1 / 1 / 1
Регистрация: 22.03.2014
Сообщений: 27
04.05.2014, 19:33
а можно попросить кинуть первое задание по множественному наследованию???заранее благодарен
0
Почетный модератор
 Аватар для Памирыч
23246 / 9158 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
05.05.2014, 11:34
teddy777, теме 4 года, вероятно, автор уже не имеет решения за ненадобностью. Совет: создайте новую тему.
Помните - одна тема - один вопрос
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.05.2014, 11:34
Помогаю со студенческими работами здесь

Перегрузка операторов для классов
Определить класс описывающий вектор в пространстве. Для класса перегрузить префиксный унарный оператор. Написать программу в которой...

Програма с использованием дружественных функций и классов
Помогите, нужно разроботать програму, которая на примере перегрузки арифметичных операций для масивов разных типов. Перегрузка операций *,...

Шаблоны классов, перегрузка операторов, C2679
#include &lt;iostream&gt;//для std::cin, std::cout #include &lt;cstdio&gt; #include &lt;string&gt; #include &lt;cstdlib&gt; using namespace std; class...

Перегрузка операторов для наследованных классов
Есть один класс, для него определена операция сложения. Есть так же наследованный класс для него работает операция сложения определенная...

Перегрузка оператора = и +=, используя наследование классов
Есть 2 класса (Point и Rect). В классе Rect нужно перегрузить операцию = и += не нарушая правил инкапсуляции. Я пробую через функции get_x,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru