Это попытка реализовать класс для работы с очередью сообщений. Сообщение задается в виде структуры, которая содержит указатель на следующий элемент (такую же структуру). Хотелось бы узнать, на сколько правильно это организовано, плюс, что на счет структур с точки зрения именно С++? Были ьы интересны замечания. ============================BEGIN============================ #ifndef QUEUE_H #define QUEUE_H // Message structure struct queueNodeStruct { char to[128]; char message[512]; struct queueNodeStruct *nextPtr; }; typedef struct queueNodeStruct queueNode; typedef queueNode *queueNodePtr; // Queue class class queueClass { private: queueNodePtr headPtr; queueNodePtr tailPtr; public: queueClass( ); int isEmpty( queueNodePtr ); void dequeue( ); void enqueue( char [], char []); queueNodePtr queueHead( ); queueNodePtr queueTail( ); }; // Constructor queueClass::queueClass( ) { headPtr = NULL; tailPtr = NULL; } // Queue is empty? int queueClass::isEmpty( queueNodePtr headPtr ) { return headPtr == NULL; } // Enqueue -- add message to queue void queueClass::enqueue( char to[], char msg[]) { queueNodePtr newPtr; newPtr = new queueNode; if( newPtr != NULL ) { strncpy( newPtr->to, to, 128 ); strncpy( newPtr->message, msg, 512 ); newPtr->nextPtr = NULL; if( isEmpty( headPtr ) ) { headPtr = newPtr; } else { tailPtr->nextPtr = newPtr; } tailPtr = newPtr; } else { std::cout << "Cannot allocate memory in queue for new item.\n"; } } // Dequeue -- remove message from queue void queueClass::dequeue( ) { queueNodePtr nodeToDel; if( !isEmpty( headPtr ) ) { nodeToDel = headPtr; headPtr = headPtr->nextPtr; if( headPtr == NULL ) { tailPtr = NULL; } delete nodeToDel; } } // Get head pointer queueNodePtr queueClass::queueHead( ) { return headPtr; } // Get tail pointer queueNodePtr queueClass::queueTail( ) { return tailPtr; } #endif =============================END============================= И пример работы с очередью, конечно примитивный, но просто для проверки работы :-) ============================BEGIN============================ #include <iostream> #include "queue.h" void instructions( void ); void printQueue( queueNodePtr currentNode ); int main() { queueClass queue; int choice; char to[128], msg[512]; instructions(); std::cout << "? "; std::cin >> choice; while( choice != 3 ) { switch( choice ) { case 1: std::cout << "Message to: "; std::cin >> to; std::cout << "Message: "; std::cin >> msg; queue.enqueue( to, msg ); printQueue( queue.queueHead() ); break; case 2: queue.dequeue( ); printQueue( queue.queueHead() ); break; default: std::cout << "Invalid choice\n"; instructions(); break; } std::cout << "? "; std::cin >> choice; } std::cout << "End of run.\n"; return 0; } void instructions( void ) { std::cout << "Your choice:\n" << " 1. add item\n" << " 2. remove item\n" << " 3. quit\n"; } void printQueue( queueNodePtr currentPtr ) { if( currentPtr == NULL ) { std::cout << "Queue is empty" << std::endl; } else { std::cout << "The queue is:" << std::endl; while( currentPtr != NULL ) { std::cout << currentPtr->to << " -> [" << currentPtr->message << "]" << std::endl; currentPtr = currentPtr->nextPtr; } } } =============================END=============================
Ответ на:
комментарий
от fenring
Ответ на:
комментарий
от mutable
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Продолжим про исключения!! (2007)
- Форум [C++] Перегрузка new и delete в производном классе (2011)
- Форум berkeley db (2006)
- Форум Сокеты, Передача данных, C/C++ (2006)
- Форум График(gnuplot) закрывается без ожидания c cin (c++ ) (2015)
- Форум Реализовать последовательно-параллельный запуск потоков (2017)
- Форум C++ выбор версии функции при перегрузке и char (2018)
- Форум C++/exceptions - деление на ноль не ловиццо, почему? (2006)
- Форум проблемы с std::variant of lambda (2020)
- Форум не пойму что за ошибка. (2015)