|
0 / 0 / 0
Регистрация: 09.04.2011
Сообщений: 4
|
|
Перегрузка операций10.04.2011, 09:58. Показов 1355. Ответов 1
Метки нет (Все метки)
Требуется перегрузить операции сложения + и присваивания =
Вопрос: почему при завершении метода, результат удаляется? Как сделать так, чтобы значение нормлаьно возвращалось и не стиралось попути? #include <iostream> #include <fstream> using namespace std; typedef struct Pol { int x; // степень Х int y; // коэффициент перед Х Pol *next; // ссылка на следующий элемент } F; typedef Pol *polyn; class polynome { public: polynome(); // constructor ~polynome(); // destructor polynome operator = (polynome & X); // оператор присваивания polynome operator + (polynome & X); // addition of function public: polyn Poly; }; polynome :: polynome() { // создание первого элемента списка Poly = NULL; }; polynome :: ~polynome() { // удаление списка polyn R; // рабочая переменная while (Poly != NULL ) { // копируем хвост R = Poly; Poly = Poly -> next; delete R; }; }; // переворачивание списка void conv (polynome & X) { polyn R , Y ; Y = new F; Y = NULL; while (X.Poly != NULL) { R = new F; // save 1 element R -> x = X.Poly -> x; R -> y = X.Poly -> y; R -> next = Y; Y = R; X.Poly = X.Poly -> next; }; X.Poly = Y; }; // копирование элемента void copyPol (polynome X, polynome & Y, polynome & X1) { polyn R, K; R = X.Poly; X1.Poly = NULL; // копия Х, но в процедуре должна быть отдльной переменной while (R != NULL) { X.Poly = X.Poly -> next; K = new F; K -> x = R -> x; K -> y = R -> y; K -> next = X1.Poly; X1.Poly = K; K = new F; K -> x = R -> x; K -> y = R -> y; K -> next = Y.Poly; Y.Poly = K; R = X.Poly; }; conv (X1); conv (Y); }; // оператор присваивания polynome polynome :: operator = (polynome & X1) { polynome X; polyn R, K; copyPol (X1, X, X1); // сохранили Х чтобы не испортить while (this -> Poly != NULL ) { // чистим this // копируем хвост R = this -> Poly; this -> Poly = this -> Poly -> next; delete R; }; conv(X); // copy in this while (X.Poly != NULL) { R = X.Poly; X.Poly = X.Poly -> next; R -> next = NULL; K = new F; K -> x = R -> x; K -> y = R -> y; K -> next = this -> Poly; this -> Poly = K; delete R; }; return *this; }; // addition of function Poly + X void AddPol (polyn Z1, polynome X1, polynome & Y) { polyn R; polynome Z, Z2, X; Y.Poly = NULL; Z2.Poly = new F; Z2.Poly = Z1; copyPol(X1,X,X1); copyPol(Z2,Z,Z2); Z1 = Z2.Poly; while ( (Z.Poly != NULL) & (X.Poly != NULL) ) { if (Z.Poly -> x > X.Poly -> x) { // прикрепляем элемент Poly R = new F; R -> x = Z.Poly -> x; R -> y = Z.Poly -> y; R -> next = Y.Poly; Y.Poly = R; Z.Poly = Z.Poly -> next; }; if (Z.Poly -> x < X.Poly -> x) { // прикрепляем элемент X R = new F; R -> x = X.Poly -> x; R -> y = X.Poly -> y; R -> next = Y.Poly; Y.Poly = R; X.Poly = X.Poly -> next; }; if (Z.Poly -> x = X.Poly -> x) { // прикрепление элемента сложения R = new F; R -> x = X.Poly -> x; R -> y = (Z.Poly -> y + X.Poly -> y); R -> next = Y.Poly; Y.Poly = R; X.Poly = X.Poly -> next; Z.Poly = Z.Poly -> next; }; if ( (X.Poly == NULL) & (Z.Poly != NULL) ) { // прицепляем оставшиеся элементы Poly while (Z.Poly != NULL) { R = new F; R -> x = Z.Poly -> x; R -> y = Z.Poly -> y; R -> next = Y.Poly; Y.Poly = R; Z.Poly = Z.Poly -> next; }; }; if ( (Z.Poly == NULL) & (X.Poly != NULL) ) { // прицепляем оставшиеся элементы X while (X.Poly != NULL) { R = new F; R -> x = X.Poly -> x; R -> y = X.Poly -> y; R -> next = Y.Poly; Y.Poly = R; X.Poly = X.Poly -> next; }; }; }; conv(Y); }; polynome polynome :: operator + (polynome & X) { polynome Y; AddPol (this -> Poly, X, Y); polyn R; // рабочая переменная return Y; }; char a1[] = "in.txt"; // файл, содержащий набор многочленов char a2[] = "out.txt"; // файл, в который выдаем const int N = 6; // максимальное допустимое колличество многочленов для рассмотрения int main () { polynome M, X, Y; X.Poly = new F; Y.Poly = new F; X.Poly -> x = 2; X.Poly -> y = 1; X.Poly -> next = NULL; Y.Poly -> x = 2; Y.Poly -> y = 2; Y.Poly -> next = NULL; M = X + Y; return 0; }; Добавлено через 1 минуту причем если писать: polynome M = X; то М возвращается правильное значение
0
|
|
| 10.04.2011, 09:58 | |
|
Ответы с готовыми решениями:
1
Перегрузка операций
Перегрузка операций |
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|||||||||||||||||||||
| 10.04.2011, 10:36 | |||||||||||||||||||||
Сообщение было отмечено Alex G как решение
Решение
Это то, что видно. Когда используешь тэги форматирования кода, можно ещё почитать будет.
1
|
|||||||||||||||||||||
| 10.04.2011, 10:36 | |
|
Помогаю со студенческими работами здесь
2
Перегрузка операций Перегрузка операций
Перегрузка операций Перегрузка операций Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|