Четверг, 28 января 2021 19:00

Перегрузка оператора индексации []

Россия
Оцените материал
(0 голосов)

Сегодня мы рассмотрим перегрузку операции индексации на примере класса QLdapUser, который мы создали в прошлой статье.

Оператор [] позволяет получать доступ к элементам массива, но может быть перегружен в пользовательском классе, таким образом мы сможем получить доступ к атрибутам пользователя.

Мы будем использовать проект из предыдущей статьи.

Объявим перегрузку оператора индексации в классе QLdapUser:

public:
    QString operator [](const QString index) const;

 

Реализация:

QString QLdapUser::operator[] (const QString index) const
{
    assert(index.compare("") != 0);
    return this->getUserValue(index);
}

Теперь, чтобы проверить добавим код в конструктор главной формы: 

     QLdapUser user1 = QLdapUser(&a);
     qDebug() << user1["company"];
     qDebug() << user1["displayName"];

Запустим:

"Altunin Soft"
"Павлова Ясмина Всеволодовна"

Если мы попробуем указать пустую строку

qDebug() << user[""];

То получим сообщение:

2021-01-26_16-08-09_2.png

Использование указателя

В конструктор главной формы добавим код:

     QLdapUser *user2 = new QLdapUser(&a);
     qDebug() << user2["company"];
     qDebug() << user2["displayName"];

И сразу получим две ошибки:

invalid types 'QLdapUser*[const char [ХХ]]' for array subscript

Для решения этой проблемы просто перепишем код:

     QLdapUser *user2 = new QLdapUser(&a);
     qDebug() << (*user2)["company"];
     qDebug() << (*user2)["displayName"];

Заключение

Сегодня мы рассмотрели перегрузку оператора индексации []

Мы перегрузили оператор [] для класса QLdapUser

Рассмотрели, как использовать перегрузку при использовании указателей.

Исходный код вы можете скачать на Github.

Прочитано 267 раз Последнее изменение Понедельник, 15 февраля 2021 12:24