| 2012-11-05 01:32:44 Помогите сделать лабораторные) Я уже близок к пониманию, но, никак не могу дойти к консенсусу со своим мозгом)) | ||||
| 2012-11-05 01:42:07 Only_True
а что за темы? пиши в ась | ||||
| 2012-11-05 01:55:56 Only_True а в чем проблема? со временем напряг, но может ответ много времени не ответит | ||||
| 2012-11-05 01:56:08 *не займет | ||||
| 2012-11-05 02:01:55 В общем, описание задания лабораторных: Спроектировать классы, реализовав конструкторы и соответствующие методы. В главной функции проилюстрировать их работу. Базовий клас (мнимых чисел): Конструкторы: по умолчания, с параметрами та копирования. Деструктор. Функцииї: суммы; разницы; умножения на действительное число; вывод инфы на экран. производный клас: комплексных чисел. | ||||
| 2012-11-05 02:02:37 Во второй лабораторной нужно перегрузить оператор "=", используя уже написанный код 1ой лабораторки. В третей нужно перегрузить операторы ввода-вывода. | ||||
| 2012-11-05 02:11:23 Блин писал когда-то класс работы с вещественными числами.... но на текущих пк его не найду =( Может быть есть какая-то загвоздка и хватит просто толчка, ответа на какой-то вопрос? Сейчас еще на работе, скоро домой поеду, если что-то найду, то напишу | ||||
| 2012-11-05 02:16:55 Only_True Код на C++ #include <iostream.h> #include <conio.h> #include <math.h> class Complex { private: double real; // Действительная часть double image; // Мнимая часть public: Complex() {}; // Конструктор по умолчанию Complex(double r) { real = r; image = 0; } // Конструктор Complex(double r, double i) { real = r, image = i; } // Конструктор ~Complex() {} // Деструктор float abs() // Модуль комплексного числа { return sqrt(real * real - image * image); } Complex operator+(Complex &); // Перегрузка оператора сложения Complex operator-(Complex &); // Перегрузка оператора вычитания Complex operator*(Complex &); // Перегрузка оператора умножения Complex operator/(Complex &); // Перегрузка оператора деления // Перегрузка функции-оператора << для вывода класса Complex friend ostream &operator<<(ostream &, Complex &); // Перегрузка функции-оператора >> для ввода класса Complex friend istream &operator>>(istream &, Complex &); }; // Перегрузка + Complex Complex::operator+(Complex &fp1) { fp1.real = real + fp1.real; fp1.image = image + fp1.image; return fp1; } // Перегрузка - Complex Complex::operator-(Complex &fp1) { fp1.real = real - fp1.real; fp1.image = image - fp1.image; return fp1; } // Перегрузка * Complex Complex::operator*(Complex &fp1) { double i, j; i = real * fp1.real - image * fp1.image; j = real * fp1.image + fp1.real * image; fp1.real = i; fp1.image = j; return fp1; } // Перегрузка / Complex Complex::operator/(Complex &fp1) { double k, i, j; k = fp1.real * fp1.real + fp1.image * fp1.image; i = (real * fp1.real + image * fp1.image) / k; j = (fp1.real * image - real * fp1.image) / k; fp1.real = i; fp1.image = j; return fp1; } // Перегрузка оператора << ostream &operator<< (ostream &fo, Complex &fp) { if (fp.image < 0) fo << fp.real << "+i(" << fp.image << ")n"; else fo << fp.real << "+i" << fp.image << "n"; return fo; } // Перегрузка оператора >> istream &operator>>(istream &fi, Complex &fp) { cout << "Введите действительную часть: "; fi >> fp.real; cout << "Введите мнимую часть: "; fi >> fp.image; return fi; } void main() { clrscr(); // Комплексные числа Complex c1, c2, c3, c4, c5; // Ввод комплексных чисел cin >> c1; cin >> c2; cin >> c3; cin >> c4; cin >> c5; // Вывод комплексных чисел cout << "nc1 = " << c1; cout << "c2 = " << c2; cout << "c3 = " << c3; cout << "c4 = " << c4; cout << "c5 = " << c5 << 'n'; cout << "Модуль c1: " << c1.abs() << "nn"; // Вывод результатов операций cout << "c1 + c2 = " << (c1 + c2); cout << "c1 - c3 = " << (c1 - c3); cout << "c1 * c4 = " << (c1 * c4); cout << "c1 / c5 = " << (c1 / c5); getch(); } При использовании обязательна ссылка на http://DMTSoft.ru Результаты работы программы Введите действительную часть: 9 Введите мнимую часть: 8 Введите действительную часть: 7 Введите мнимую часть: 6 Введите действительную часть: 5 Введите мнимую часть: 4 Введите действительную часть: 3 Введите мнимую часть: 2 Введите действительную часть: 1 Введите мнимую часть: 2 c1 = 9+i8 c2 = 7+i6 c3 = 5+i4 c4 = 3+i2 c5 = 1+i2 Модуль c1: 4.123106 c1 + c2 = 16+i14 c1 - c3 = 4+i4 c1 * c4 = 11+i42 c1 / c5 = 5+i(-2) http://www.dmtsoft.ru/bn/370/as/oneaticleshablon/ только рекомендую как следует разобраться в коде и изменить названия, т.к. преподаватели тоже поиском пользуются ;) (сам препод, по себе знаю) | ||||
| 2012-11-05 02:32:16 MrHide Огромное спасибо, а то я много-долго искал, но лабы с адекватными комментариями найти не могу. ![]() | ||||
| 2012-11-05 02:54:19 Only_True угу, хороший стиль комментирования, к сожалению, редкость. здесь вроде все понятно, в этом примере | ||||
| 2012-11-05 03:00:45 MrHide Одна проблема, нету перегрузки оператора "="...( | ||||
2012-11-05 03:03:28
Complex operator+(Complex &); // Перегрузка оператора сложения Complex operator-(Complex &); // Перегрузка оператора вычитания Complex operator*(Complex &); // Перегрузка оператора умножения Complex operator/(Complex &); // Перегрузка оператора деления | ||||
| 2012-11-05 03:14:11 Complex operator+(Complex &); // Перегрузка оператора сложения Complex operator-(Complex &); // Перегрузка оператора вычитания Complex operator*(Complex &); // Перегрузка оператора умножения Complex operator/(Complex &); // Перегрузка оператора деления Complex & operator=(Complex &); // Перегрузка оператора присваивания // Перегрузка оператора = ostream &operator = (Complex &fp) { real = fp.real; image = fp.image; return *this; } давно не писал, и проверить сейчас негде о что-то вроде этого должно быть | ||||
| 2012-11-05 03:15:39 там суть в том, что нужна ссылка на левый операнд (адресат присваивания), чтобы мы могли его изменить. И возвращать надо измененный объект, чтобы можно было его использовать в цепочке присваиваний типа a = b = c; | ||||
2012-11-05 03:20:55
Тут возвращается значение объекта fp? А еще, на сколько я помню, в теле класса нужно вводить проверку на то, что измененное значение объекта не равняется начальным... Как-то так, вроде. | ||||
| 2012-11-05 03:27:51 Only_True
не совсем так. возвращается тот объект с которым мы работаем (который вызвал функцию-оператор), левый операнд) например если у нас есть объекты ob1 и ob2 то в строчке ob1 = ob2; ob1 вызывает перегруженный оператор = (т.е. при использовании указателя this подразумевается именно он) а ob2 это правый операнд т.е. в нашем коде fp
не совсем понял о чем речь. Тут зависит от того какой смысл вкладывать в оператор. Мы обычно подразумевали что оператор присваивания не обращает внимание на старое значение левого операнда и присваивает ему значение правого, т.е. левый становится полной копией правого (правый при этом не изменяется) | ||||
2012-11-05 03:34:58
Ну вот в том и смысл, что если исходное значение равняется измененному (что бы не делать лишних операций) не переписывать информацию заново (ведь в том случае, что был в примере, если у нас есть какая-то значение объекта об1 и мы приравниваем ему значение об2(которое идентично об1), то оно его будет переписывать) вводится проверка. | ||||
| 2012-11-05 03:45:01 ну тут спорно.... М.б. это зависит от самого содержимого класса. В данном случае проще перезаписать два числа чем сравнивать их друг с другом, ведь насколько я помню реализацию проверки на равенство числа вычитаются, а результат сравнивается с нулем, боюсь что операций в результате получится больше нежели просто перезаписать. Возможно имеет смысл подобная проверка, если хранится какой-то массив данных, но тогда надо иметь быстрый и эффективный метод сравнения этих данных | ||||
| 2012-11-05 03:50:47 MrHide Хм... Ок, спасибо, будет о чем побеседовать с преподавателем)) | ||||
| 2012-11-05 04:01:47 MrHide И еще один вопрос... В примере описан класс для комплексных чисел... Но в условии задачи он должен быть производным. Т.е сначала мне нужно описать класс только для мнимых чисел... На сколько я понимаю, то всё уже написано, стоит лишь назвать его(данный клас), например "Imagine"
Только вот с принципом наследования я не совсем подружился. Теорию я знаю, да и лёгонький пример написать могу, но сам процесс (почему и как) не понял, по этому не могу применить на примере прикладной задачи(( | ||||
| 2012-11-05 04:14:18 Only_True а я не совсем пойму что хотят в задаче, я всегда считал что мнимое и комплексное число - одно и тоже с наследованием есть разные фокусы..... все зависит от типа наследования (public, private,protected) разница, насколько я помню в доступе к переменным и методам базового класса в одном случае он будет, в другом нет. | ||||
| 2012-11-05 04:40:37 MrHide На самом деле, в программировании существенной разницы как-то особо и не наблюдается)) Но, что оно есть на самом деле: У нас есть ось координат ХоУ. Иксы - это реальное число, игрики - мнимое... Т.е У*i, где і = sqrt(-1). Мнимое - это когда иксы равны нулю, есть только значение у*і. А комплесное, когда и Х и У имеют какое-то значение... Мое понимание, как оно выглядит в программировании: У нас есть двумерный массив [x, iy]. Мнимые числа - массив, где х=о Комплесные - и Х и У что-то значат. Т.е теория комплексных чисел в программировании не несет в себе никакой смысловой нагрузки с точки зрения математики и физики.
Мне нужно что бы производный класс мог использовать все функции наследуемого класса, но имел свои (прайват) переменные. | ||||
| 2012-11-05 04:41:09 А вообще наследование всегда напоминает мне известную хохму: "На C я могу просто делать ошибки, а на C++ я могу их наследовать!" | ||||
| 2012-11-05 04:41:57 MrHide ![]() | ||||
| 2012-11-05 04:45:44 Only_True теперь понял что от вас хотят. 1. базовый класс. см. пример только выкинуть из него переменную "double real; // Действительная часть " и все ее использование в конструкторах и методах это получится класс работы с мнимыми числами. дальше пишем 2. производный класс. в нем прописываем только переменную "double real; // Действительная часть " а переменную image надо наследовать из базового класса. ну и скорее всего в производном классе придется перегрузить все методы и операторы чтобы научить их работать с добавленной переменной real как-то примерно такая схема | ||||
| 1 | 2 |