Advertisement
Guest User

Untitled

a guest
Aug 20th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.59 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. //суть задания такова: необходимо перегрузить оператор присваивания, и конструктор копирования так,
  4. //чтобы можно было копировать односвязные списки
  5. class link
  6. {
  7. private:
  8.     int data;
  9. public:
  10.     link * next;
  11.     void getData(int d) { data = d; }
  12.     int returnData() {
  13.         std::cout << "Hi, i will return " << data << std::endl;
  14.         //при компиляции ошибка доступа к элементу
  15.         //Exception thrown : read access violation.
  16.         //  this was 0xCCCCCCCC.
  17.         return data;
  18.     }
  19. };
  20.  
  21.  
  22.  
  23. class list
  24. {
  25. private:
  26.     link* first;
  27. public:
  28.  
  29.     list() :first(NULL) {}
  30.     list(list& dd1)
  31.     {
  32.         link* current = dd1.first;
  33.         while (current->next != NULL)
  34.         {
  35.             add_to_list(current->returnData());
  36.             current = current->next;
  37.         }
  38.     }
  39.     ~list() {
  40.         link* current = first;
  41.         while (current != NULL)
  42.         {
  43.             link*temp = current;
  44.             std::cout << "Droping value " << temp->returnData() << std::endl;
  45.             current = current->next;
  46.             delete temp;
  47.         }
  48.     }
  49.     void add_to_list(int d) {
  50.         link* newlink = new link;
  51.         newlink->getData(d);
  52.         newlink->next = first;
  53.         first = newlink;
  54.     }
  55.     void show_list()
  56.     {
  57.         link* current = first;
  58.         while (current)
  59.         {
  60.             std::cout << "==done==";
  61.             std::cout << current->returnData() << std::endl;
  62.             current = current->next;
  63.         }
  64.     }
  65.     list operator = (list& dd1)
  66.     {
  67.     // собственно сама перезагрузка оператора
  68.         link* current = dd1.first; // я создаю переменную от которой будет вестись счет, назначаю первый элемент того, что хочу присвоить
  69.         while (current->next != NULL)
  70.         {
  71.             //пока следующий элемент не будет равен концу списка, я заполняю свой список
  72.             add_to_list(current->returnData());
  73.             current = current->next; //переход на следующий элемент
  74.         }
  75.         return *this;
  76.  
  77.     }
  78.  
  79.     //как я понимаю, ошибка из-за того, что я пытаюсь вернуть returnData() незарегестрированный участок
  80.     //памяти тобишь мусор
  81. };
  82.  
  83.  
  84.  
  85. int main()
  86. {
  87.     list list1, list2;
  88.     list1.add_to_list(22);
  89.     list1.add_to_list(23);
  90.     list1.add_to_list(24);
  91.     list1.add_to_list(25);
  92.     list1.add_to_list(26);
  93.     std::cout << "list1\n";
  94.     list1.show_list();
  95.     list2 = list1;
  96.     std::cout << "list2\n";
  97.     list2.show_list();
  98.  
  99.     system("PAUSE");
  100.     return 0;
  101.  
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement