Тролль Опубликовано 22 декабря, 2008 Жалоба Поделиться Опубликовано 22 декабря, 2008 (изменено) Pathfinder: Создать класс координат (double). Определить унарный оператор ++ какдружественную функцию.Определить бинарный оператор +, как функцию-член. Сложить координаты с друг другом и с числом. Присвоить координаты(=). Что такое "сложить координаты с друг другом", я истолковал как попарное сложение координат при сложении объектов. Можно также прибавить к объекту число, тогда оно прибавится к обеим координатам. #include <iostream.h>class point{public: double x, y; point(double rex, double rey){x=rex; y=rey;} point(){x=0; y=0;} point operator ++ (){x++; y++;} point operator + (point &T){return point(x+T.x, y+T.y);} point operator + (double g){return point(x+g, y+g);} point operator=(const point &r){if(this!=&r){x=r.x; y=r.y;} return *this;} };main(){ point Tp(2,2),Td(5,5),Te,Tf; cout<<Tp.x<<" "<<Tp.y<<endl; ++Tp; cout<<Tp.x<<" "<<Tp.y<<endl; Te=Tp+Td; cout<<Te.x<<" "<<Te.y<<endl; Te=Tp+4; cout<<Tp.x<<" "<<Tp.y<<endl; Tf=Te; cout<<Tf.x<<" "<<Tf.y<<endl; getchar();} Второй задачей заниматься не буду, чересчур долгая затея :) . P.S. Тьфу, забыл, что ++ надо было определить как дружественную функцию. Поэтому поправка: надо заменить строку point operator ++ (){x++; y++;} на чуть более громоздкую friend point operator ++ (point& T){T.x++; T.y++; return T;} Lion HC: Или все же есть возможность обмениваться данными через произвольную функцию творения?Через произвольную функцию - нет (у разных процессов разные адресные пространства), но в Windows есть несколько средств связи между процессами, при помощи которых они могут обмениваться данными: FileMapping (обмен через систему виртуальной памяти, т.е. проекцию файла подкачки на оперативную память), каналы (вроде конвейеров в MS-DOS), сокеты (WinSock - имитация или действительное использование сети). Можно, конечно, использовать и просто запись в файлы и чтение из них, хотя это медленнее и без синхронизации, зато не требует разбираться в вышеописанном. Изменено 22 декабря, 2008 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Pathfinder Опубликовано 22 декабря, 2008 Жалоба Поделиться Опубликовано 22 декабря, 2008 Тролль, :) огромное спасибо, честно говоря, не ожидал, что мне ответят, над второй задачкой придётся очень сильно попыхтеть. :) Ссылка на комментарий Поделиться на другие сайты Поделиться
Lion HC Опубликовано 22 декабря, 2008 Жалоба Поделиться Опубликовано 22 декабря, 2008 Тролль, спасибо! А Чем Вы пользуетесь? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 25 декабря, 2008 Жалоба Поделиться Опубликовано 25 декабря, 2008 (изменено) Pathfinder: над второй задачкой придётся очень сильно попыхтеть.Да уж, задание явно написано не с трезвой головы. Предлагается создать глупые операции и использовать для них неподходящие обозначения. У очереди, по идее, должно быть три операции: помещение элемента в очередь, извлечение элемента из очереди и проверка пустоты очереди. В задании предлагается ++ использовать для добавки элемента в очередь, но ++ - унарная операция, может иметь только один операнд, ее можно "прицепить" к числу, можно к очереди, но связать число с очередью - нет. Аналогично, -- может вытащить элемент из очереди, но его обычно надо не выкинуть в ведро, а присвоить какой-то переменной для дальнейшего использования или хоть распечатки, то есть опять надо связывать две вещи, а операция унарная. А операции с выходным элементом очереди было бы проще делать без всякого доопределения операций: вытащил из очереди, сложил или перемножил с чем-то и затолкал обратно в очередь. Надо было бы, по хорошему, + использовать для прибавления элемента в очередь, а - для извлечения элемента из очереди, тогда бы и волки были сыты, и овцы целы. Тем не менее, глупости задания придется как-то реализовывать. Тогда реализация может выглядеть, например, как показано ниже. Приходится извиниться, что из-за требования обеспечить чесание ушей ногами эти ноги пришлось делать кривыми. На шедевр явно не тянет. #include <iostream.h>class Queue {public: float info; struct rec{float info; rec *ref;}; rec *beg, *end, *q; void operator ++(){q=new rec; q->ref=NULL; end->info=info; end->ref=q; end=q;} void operator +(float i){info+=i;} friend void operator *(Queue &T,float i){T.info*=i;} Queue(){q=new rec; q->ref=NULL; q->info=0; beg=end=q;} friend bool operator --(Queue& T){if(T.beg->ref==T.end->ref)return false; else{T.info=T.beg->info; T.q=T.beg->ref; delete T.beg; T.beg=T.q; return true;}} };int main() {Queue q; float f;while(f){cout<<" Enter number: "; cin>>f; if(f){q.info=f; q+10; q*10; ++q;}}cout<<endl; while(--q)cout<<q.info<<endl; getchar(); getchar(); return 0;} Из-за требования использования унарных операций для занесения в очередь и извлечения из очереди приходится эти действия выполнять в два приема каждое. В классе выделяем переменную связи с очередью info и при записи в очередь сначала заносим в нее нужное число, а затем отдельно заталкиваем содержимое этой переменной в очередь. А для извлечения из очереди выполняем унарную операцию извлечения из очереди в переменную связи и потом ее содержание присваиваем чему уж там хотим. Операции сложения с числом и умножения на него выглядят уродливо, поскольку их результат ничему не надо присваивать. В общем, марсианская математика. Программка для тестирования принимает числа в очередь до тех пор, пока не будет введен нуль. Каждое принятое в очередь число складывается с 10, после чего умножается на 10, чтобы продемонстрировать работу с элементом очереди. Когда будет введен нуль, он в очередь не записывается, а программа начинает извлекать числа из очереди и распечатывать их, пока все они не будут удалены из очереди. Если вводилось, скажем, 2, то оно после демонстрации операций над ним при его вводе превратилось в (2+10)*10, то есть 120, и таким будет извлечено и распечатано. Изменено 25 декабря, 2008 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Pathfinder Опубликовано 26 декабря, 2008 Жалоба Поделиться Опубликовано 26 декабря, 2008 Тролль: Да уж, задание явно написано не с трезвой головы. Тролль, я с тобой полностью согласен, не знаю где наш препод откопал это задание, может быть он сам его придумал (на такие глупости он способен!!) . В общем большое спасибо за подробный разбор этого задания. :mad: Сдавать лабу буду, твою помощь не забуду. Слушай, будет нечем заняться посмотри вот ещё два задания Задание 1. Одиночное наследование. Создать класс четырехугольников, квадратов и прямоугольников. Создать из них иерархию. Определить функции печати, конструкторы и деструкторы, вычисление площади и периметра. Задание 2. Множественное наследование. Создать иерархию типов, описывающую данные - сигнал, данные результат обработки и данные, как результат обработки сигнала и представляющие собой сигнал. Классы должны конструкторы, включая конструктор копирования, виртуальные деструкторы, перегруженные функции вывода в поток и ввода в поток.:g: Ссылка на комментарий Поделиться на другие сайты Поделиться
Pathfinder Опубликовано 15 января, 2009 Жалоба Поделиться Опубликовано 15 января, 2009 Все, решил я эти задания. Ссылка на комментарий Поделиться на другие сайты Поделиться
Lion HC Опубликовано 22 января, 2009 Жалоба Поделиться Опубликовано 22 января, 2009 А можно посмотреть на результат? Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Хексем Опубликовано 23 января, 2009 Жалоба Поделиться Опубликовано 23 января, 2009 Нужна помощь... Нужно сделать элементарную консольную программу, которая при нажатии на "1" прописывает определенные значения IP, mask, шлюз и DNS сервера в подключении...При нажатии на "2" - ставить все настройки динамически (на автоматическое получение)... скажем, команда для установки IP и т.д. следующая netsh -c interface ip set address "Подключение по локальной сети" static 192.168.1.45 255.255.255.0 192.168.1.1 как реализовать ее выполнение в C++ ? Копать в system() ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 24 января, 2009 Жалоба Поделиться Опубликовано 24 января, 2009 Хексем: Проще всего использовать system(). Это просто передает обработку команды командному процессору Windows, работать с которым проще и привычнее. Можно также использовать функцию CreateProcess(), которая использует API, но это более сложный путь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Хексем Опубликовано 24 января, 2009 Жалоба Поделиться Опубликовано 24 января, 2009 Хексем: Проще всего использовать system(). Это просто передает обработку команды командному процессору Windows, работать с которым проще и привычнее. Можно также использовать функцию CreateProcess(), которая использует API, но это более сложный путь. В качетве параметра функции system() может быть любая строка ? Скажем system("netsh -c interface ip set address "Подключение по локальной сети" static 192.168.1.45 255.255.255.0 192.168.1.1"); не компилируется. В чем причина - не знаю... :) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 24 января, 2009 Жалоба Поделиться Опубликовано 24 января, 2009 Причина - в правилах записи строковых констант C++. На стадии компиляции знак " перед словом Подключение будет понят как завершающий строку. Чтобы записать внутри строки знак ", в C++ применяется специальное соглашение. Правильная запись: system("netsh -c interface ip set address ""Подключение по локальной сети"" static 192.168.1.45 255.255.255.0 192.168.1.1"); Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Хексем Опубликовано 24 января, 2009 Жалоба Поделиться Опубликовано 24 января, 2009 Причина - в правилах записи строковых констант C++. На стадии компиляции знак " перед словом Подключение будет понят как завершающий строку. Чтобы записать внутри строки знак ", в C++ применяется специальное соглашение. Правильная запись: system("netsh -c interface ip set address ""Подключение по локальной сети"" static 192.168.1.45 255.255.255.0 192.168.1.1"); Спасибо! Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Хексем Опубликовано 24 января, 2009 Жалоба Поделиться Опубликовано 24 января, 2009 Немного странный вопрос по Visual C++ 2005... До недавнего времени прогал на VS 6.0, ctujlyz gjcnfdbk 2005... Как программу запустить на выполнение ? ;) В VS 6.0 компилился Ctrl+F5... Ссылка на комментарий Поделиться на другие сайты Поделиться
Lion HC Опубликовано 25 января, 2009 Жалоба Поделиться Опубликовано 25 января, 2009 Правильная запись: system("netsh -c interface ip set address ""Подключение по локальной сети"" static 192.168.1.45 255.255.255.0 192.168.1.1"); Думаю правильней будет: system("netsh -c interface ip set address \"Подключение по локальной сети\" static 192.168.1.45 255.255.255.0 192.168.1.1"); так проще запомнить и не запутаться, ведь именно знак \ делает из любого зарезервированого символа обычный. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 25 января, 2009 Жалоба Поделиться Опубликовано 25 января, 2009 Lion HC: Согласен :) . Спасибо за поправку. Ссылка на комментарий Поделиться на другие сайты Поделиться
Pathfinder Опубликовано 7 февраля, 2009 Жалоба Поделиться Опубликовано 7 февраля, 2009 А можно посмотреть на результат? Lion HC, я бы мог тебе результаты на ящик кинуть. Нереально всё это здесь разместить. Ссылка на комментарий Поделиться на другие сайты Поделиться
Lion HC Опубликовано 7 февраля, 2009 Жалоба Поделиться Опубликовано 7 февраля, 2009 Хорошо было бы, если можна будет в разделе программирование прикреплять к посту вложенный текстовый файл... Если не трудно, пожалуйста на мыло: Lion.HC@gmail.com Я ведь сам учусь, интересно посмотреть... Ссылка на комментарий Поделиться на другие сайты Поделиться
Pathfinder Опубликовано 8 февраля, 2009 Жалоба Поделиться Опубликовано 8 февраля, 2009 Немного странный вопрос по Visual C++ 2005... До недавнего времени прогал на VS 6.0, ctujlyz gjcnfdbk 2005... Как программу запустить на выполнение ? :D В VS 6.0 компилился Ctrl+F5... F5 - запуск программы, F10 и F11 - пошаговая отладка, Ссылка на комментарий Поделиться на другие сайты Поделиться
Lion HC Опубликовано 11 марта, 2009 Жалоба Поделиться Опубликовано 11 марта, 2009 Подскажите пожалуйста каким типом или классом стандартной библиотеки можна воспользоваться для обработки даных времени. Но нужно учитывать и миллисекунды. К сожалению TTime, TDateTime, time_t не содержат миллисекунды. Или нужно писать свой клас? Примерно данные должны представлять: миллисекунды, ss, m, +\-h Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 11 марта, 2009 Жалоба Поделиться Опубликовано 11 марта, 2009 Lion HC: Посмотри функции timeGetTime и timeGetSystemTime. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Хексем Опубликовано 8 мая, 2009 Жалоба Поделиться Опубликовано 8 мая, 2009 Подскажите где можно прочитать описание библиотечных файлов, таких как iostream.h conio.h string.h stdlib.h и т.д. на русском языке. Можете подсказать какую-нибудь хорошую книгу, с описанием бмблиотек C++ и примерами использования функций. По поиску много находит, так что, что именно читать определиться трудно =) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 8 мая, 2009 Жалоба Поделиться Опубликовано 8 мая, 2009 Надо смотреть книгу по конкретной версии языка. Библиотеки функций и классов C++ в разных реализациях разные, к тому же со временем еще и меняются. Конечно, обычно в файлах разных реализаций много общего, но часто встречаются и существенные отличия. Кстати, имена файлов, которые ты привел, являются именами не библиотечных, а заголовочных файлов. Но сейчас в стандартной библиотеке стандарта C++ файлов с такими именами вообще нет - они использовались в старых версиях C++. В именах новых заголовочных файлов нет расширений .h, да и сами эти файлы тоже различаются в разных реализациях. Впрочем, для совместимости во всех существующих реализациях C++ старые заголовочные файлы тоже можно использовать, хотя обычно выдается предупреждение, что вы пользуетесь устаревшим вариантом заголовочного файла соответствующей библиотеки. При изучении C++ очень часто жалуются, что вот кто-то взял учебник, а примеры из него не работают - значит, человек использует другую версию языка, точнее, библиотек. Поэтому надо брать учебник или справочник по конкретной версии C++ - там будет описано именно тот вариант библиотек и заголовочных файлов, который есть в этой версии. "Страуструп всегда довольно прохладно относился к попытке его (языка) полной стандартизации и выступал за реализации, в которых базовые возможности языка расширялись бы средствами и библиотеками, характерными только для данной реализации." Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Хексем Опубликовано 9 мая, 2009 Жалоба Поделиться Опубликовано 9 мая, 2009 Что понимается под версией языка и реализацией ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 9 мая, 2009 Жалоба Поделиться Опубликовано 9 мая, 2009 Реализация - компилятор, библиотеки, интегрированная среда какого-то одного разработчика. Например, реализация Microsoft - Visual C++, реализация фирмы Borland - Borland C++ Builder, реализация фирмы Intel - Intel C++, реализация фирмы Watcom (впоследствии Sybase) - Watcom C++, Open Source проект - wxDev-C++... А версия - это номер очередного варианта какой-либо реализации, например Borland C++ Builder 6 - шестая версия реализации C++ фирмой Borland. Постепенно язык изменялся, вводились новые средства, но, естественно, каждая фирма старалась для совместимости сохранить и то устаревшее, что у нее было в прежних версиях - было бы нехорошо, если бы клиент, купивший новую версию, не мог использовать с ней свои старые исходные коды программ. А в отношении библиотек разных фирм - они сближались, но все же различия остаются, особенно если использовать старые варианты библиотек. К примеру, недавно на форуме проскочила задача с переводом целого числа в строку - у Borland это функция itoa, у Microsoft - _itoa. А библиотеки визуальных компонентов у Borland и Microsoft совсем разные -- VCL и MFC. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Хексем Опубликовано 29 мая, 2009 Жалоба Поделиться Опубликовано 29 мая, 2009 Подскажите пожалуйста как в C++ подчитать sin(x) + (sin(x))^2... Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти