Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2015, 17:31   #1
Kvayzer
Новичок
Джуниор
 
Регистрация: 06.12.2015
Сообщений: 6
По умолчанию Передача в метод по перегрузке оператора указателя на объект

У нас есть массив указателей на базовый класс
Код:
STRING **ptr = new STRING*[size] ;
    for (int i = 0; i<size; ++i)
    {
        std::cout << "Input a string: ";
        char tempStr[100];
        std::cin >> tempStr;
        ptr[i] = new idSTRING(tempStr);
   }
Есть конструкция
ptr[a]+ptr[b]

Но операция + у меня перегружена только для обычных объектов:
Код:
STRING STRING::operator+(STRING oldStr)
{
    const int n = len+oldStr.len+1;
    char *temp = new char [n];
    int i = 0;
    if (str)
        for ( ; i<len; ++i)
            temp[i] = str[i];
    if (oldStr.str)
        for (int j = 0; j<oldStr.len+1; ++i, ++j)
            temp[i] = oldStr.str[j];
    STRING newStr(temp);
    delete[] temp;
    return newStr;
}
Выходит ошибка:invalid operands of types 'STRING*' and 'STRING*' to binary 'operator+'

Как мне передать STRING* ? Пробовал перегружать перегрузку плюса с разными параметрами (STRING &oldStr) или (STRING *oldStr) . Ничего не работает. Та же ошибка. Как правильно сделать?
Kvayzer вне форума Ответить с цитированием
Старый 06.12.2015, 17:38   #2
Kvayzer
Новичок
Джуниор
 
Регистрация: 06.12.2015
Сообщений: 6
По умолчанию

А ну да. У нас же первый операнд тоже указатель, тогда нужно внешнюю функции для перегрузки делать.
Попробовал так, всё равно ошибка та же самая
Код:
STRING STRING::operator+(const STRING &oldStr)
{
    const int n = len+oldStr.len+1;
    char *temp = new char [n];
    int i = 0;
    if (str)
        for ( ; i<len; ++i)
            temp[i] = str[i];
    if (oldStr.str)
        for (int j = 0; j<oldStr.len+1; ++i, ++j)
            temp[i] = oldStr.str[j];
    STRING newStr(temp);
    delete[] temp;
    return newStr;
}
Перед этим объявил её в методе класса, как дружественную
Код:
friend STRING operator+(STRING&, STRING&);
Попробовал вот так:
Код:
friend STRING operator+(STRING *oldStr1, STRING *oldStr2)
Ошибка 'STRING operator+(STRING*, STRING*)' must have an argument of class or enumerated type

Последний раз редактировалось Kvayzer; 06.12.2015 в 17:45.
Kvayzer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возвращение указателя на объект вместо самого объекта. Как долго протянет? WhiskasTM Общие вопросы Delphi 9 07.10.2014 12:23
Передача указателя на объект CodeNOT Общие вопросы C/C++ 7 06.01.2011 20:01
Передача указателя по цепочке (Си) mutabor Общие вопросы C/C++ 3 29.05.2010 16:29
Передача указателя на массив в функцию loser Общие вопросы C/C++ 2 19.02.2010 19:41
передача указателя в функцию arturka Помощь студентам 3 06.07.2008 00:25