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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 53, средняя оценка - 4.72
Romich41
15 / 15 / 1
Регистрация: 01.11.2009
Сообщений: 188
#1

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

28.02.2010, 13:19. Просмотров 6716. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2010, 13:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Romich41
15 / 15 / 1
Регистрация: 01.11.2009
Сообщений: 188
01.03.2010, 15:17  [ТС] #2
Так почему никто не хочет помочь???????=(
Со множественным наследованием я уже разобрался
Задание 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; 
}
2
ds102061
2 / 2 / 2
Регистрация: 13.10.2010
Сообщений: 144
13.05.2013, 11:18 #3
а можете показать программу 1-го задания?
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
13.05.2013, 21:41 #4
Второе задание делается не так. Там надо создать робмовидную иерархию классов используя, очевидно, виртуальное наследование.

Можно, например, так.
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
teddy777
0 / 0 / 0
Регистрация: 22.03.2014
Сообщений: 27
04.05.2014, 19:33 #5
а можно попросить кинуть первое задание по множественному наследованию???заранее благодарен
0
Памирыч
Почетный модератор
20590 / 8642 / 1029
Регистрация: 11.04.2010
Сообщений: 11,009
05.05.2014, 11:34 #6
teddy777, теме 4 года, вероятно, автор уже не имеет решения за ненадобностью. Совет: создайте новую тему.
Помните - одна тема - один вопрос
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2014, 11:34
Привет! Вот еще темы с ответами:

перегрузка операторов и функций - C++
Помогите пожалуйста хотя бы разобраться что нужно сделать класс стринг с горем пополам готов а вот дальше..... 1. Реализовать...

Перегрузка функций и операторов - C++
Создать класс String – строку, используя динамическую память. Определить операторы &quot;+&quot; –сложение строк, &quot;=&quot; и &quot;+=&quot; – присваивания, как...

АТД, перегрузка операторов и функций - C++
Задание: 1. Реализовать (на основе лекционного материала) класс String, который представляет строку символов произвольной длины (отчет -...

Программа с использованием дружественных функций и классов. Создайте программу с классом student - C++
19..Разработайте алгоритм и создайте программу с использованием дружественных функций и классов. ЯЗЫК С++ Создайте программу с классом...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.05.2014, 11:34
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru