Классы с самоадресацией - классы, которые содержат элемент-указатель, который указывает на объект того же типа класса:
Пример 1

class Node
{
public:
Node(int);
void setdata(int);
int getdata() const;
void setnextptr(const Node *);
const Node * getnextptr() const;

private:
int data;
Node * nextptr;
};

Данное описание определяет тип класса Node – он имеет два закрытых элемента данных: целый элемент data и указатель nextptr, который указывает на объект типа Node, т.е. объект того же тип. Такие классы называются классами с самоадресацией. В них элемент nextptr используется как связывающий, т.е. nextptr может быть использован для связи объекта типа Node с объектом того же типа. У типа Node также имеется пять функций-элементов: конструктор, который принимает данные целого типа, для инициализации данных поля data; функция для установки значения data; функция getdata, возвращающая значение data : функция setnextptr для установки значения указателя nextptr, а также функция getnextptr, которая возвращает значение указателя nextptr. Объекты классов с самоадресацией могут связываться друг с другом, формируя абстрактные структуры данных: связные списки, очереди, стеки, деревья.
Рис. 1.  

На рисунке показано два объекта класса с самоадресацией, связанные вместе для создания структуры «список». Обратный слеш отображает нулевой указатель помещенный в элемент связи второго объекта, чтобы было ясно, что эта связь не указывает на какой-либо другой объект.
Типичная ошибка: указатель связи в последнем узле не установлен на ноль.