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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 53, средняя оценка - 4.72
Romich41
 Аватар для Romich41
15 / 15 / 1
Регистрация: 01.11.2009
Сообщений: 188
28.02.2010, 13:19     Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов #1
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или сказать где их можно посмотреть=) Мне нужно просто решить следующие задачи:
Множественное наследование:
Задание 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];
«+» − объединить два списка;
«!=» − проверка на неравенство.
ПОМОГИТЕ ПЛИЗ ВСЕМ ЧЕМ МОЖИТЕ...УМОЛЯЮ!!!=)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2010, 13:19     Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов
Посмотрите здесь:

Перегрузка операторов для классов C++
перегрузка операторов и функций C++
C++ “Перегрузка операторов для классов
C++ Приведите ситуации когда использование классов лучше структур и функций
Множественное наследование с использованием абстрактных базовых классов, файлового ввода-вывода с применением потоков С++, функций обработки исключи C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Romich41
 Аватар для 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; 
}
ds102061
 Аватар для ds102061
2 / 2 / 2
Регистрация: 13.10.2010
Сообщений: 144
13.05.2013, 11:18     Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов #3
а можете показать программу 1-го задания?
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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 минут
Забыл про конструктор копирования и оператор присваивания у производного класса. Добавьте сами.
teddy777
0 / 0 / 0
Регистрация: 22.03.2014
Сообщений: 27
04.05.2014, 19:33     Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов #5
а можно попросить кинуть первое задание по множественному наследованию???заранее благодарен
Памирыч
Администратор
 Аватар для Памирыч
20460 / 8512 / 1023
Регистрация: 11.04.2010
Сообщений: 10,984
05.05.2014, 11:34     Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов #6
teddy777, теме 4 года, вероятно, автор уже не имеет решения за ненадобностью. Совет: создайте новую тему.
Помните - одна тема - один вопрос
Yandex
Объявления
05.05.2014, 11:34     Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов
Ответ Создать тему
Опции темы

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