Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Указатель на классы, объявленный как член класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сложение двух векторов и запись результата в третий вектор http://www.cyberforum.ru/cpp-beginners/thread155699.html
Программа заполняет 2 вектора типа float значениями. После чего вектора складываются и результат сложения записывается в третий вектор. Вот мой код #include <iostream> #include <vector> int...
C++ Динамически Что обозначает слово динамически в таких словах: динамический массив, динамическое выделение памяти? http://www.cyberforum.ru/cpp-beginners/thread155674.html
C++ Подсчёт количества слов в строке
Помогите разобраться в проблемке. Программа должна считывать текст из файла по слову и копировать его в другой. При этом счётчик их считает. Когда в файле одна строка всё норм, но если больше то...
Есть пример.Поиск ошибки.dev-C++ C++
Вечер добрый.Как правильно определить методы,нужно ли вызывать для массива name деструктор в операторе присваивания?При компиляции выдаёт ошибку на функции ShowCow() was not declared in this scope...
C++ перегрузка оператора = http://www.cyberforum.ru/cpp-beginners/thread155655.html
как реализавать функцию перегрузки оператора = в классах Cd и Classic? #include <cstring> #ifndef _ABCD_H_ #define _ABCD_H_ class ABCd { private: char performers; char...
C++ С чего начать изучение С++ Хочу изучить С++, пожалуйста подскажите книгу понятную для чайников, и компелятр. подробнее

Показать сообщение отдельно
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
29.07.2010, 22:18
alexsvk, я не мастер объяснять что либо словами, но попробую.

Рассмотрим приведенный тобою пример с односвязным списком, но немного его упростим избавившись от шаблонов. Пусть список предназначается для хранения целых чисел. В то же время немного усложним - разделим понятия узел списка и собственно список.

Односвязный список, это структуру данных, каждый элемент (далее узел) которой , кроме собственно данных, хранит еще и указатель на следующий узел. На С++ узел односвязного списка лучше всего описать с помощью следующей структуры:
C++
1
2
3
4
struct Node {
  int   data;
  Node* next;
};
Что же будет представлять собой список? Список будет содержать указатель на головной узел и поддерживать метод добавления нового числа в список.
Получаем следующее объявление класса:
C++
1
2
3
4
5
6
7
class List {
public:
  void Add(int data);
 
private:
  Node* head;
};
Теперь подумаем над реализацией метода добавления. Здесь есть два варианта, либо добавлять узел с новым числом в начало списка, либо в конец. Для упрощения реализуем первый вариант. Добавим конструкторы и деструкторы в структуру узла и класс списка, а также метод для вывода на консоль содержания списка.
Получим:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
 
// Структура, описывающая узел списка
struct Node {
  Node(int data, Node* next)
  : data(data)
  , next(next) {
  }
 
  ~Node() {
    // Удаляем следующий узел
    delete next;
  }
 
  int   data; // Данные
  Node* next; // Указатель на следующий узел
};
 
class List {
public:
  List()
  : head(0) {
  }
 
  ~List() {
    // Удаляем головной узел
    delete head;
  }
 
  void Add(int data) {
    head = new Node(data, head);
  }
 
  void Show() {
    for (Node* curr = head; curr; curr = curr->next)
      std::cout << curr->data << std::endl;
  }
 
private:
  Node* head; // Головной узел
};
В итоге мы получили динамически расширяемый список для хранения целых чисел.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru