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

Обращение к бинарным операторам производного класса - C++

Восстановить пароль Регистрация
 
UnknownSmith
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 10
15.03.2013, 00:22     Обращение к бинарным операторам производного класса #1
В классе StrLIdf, потомке StrL описан оператор

C++
1
friend StrLIdf operator& (const StrLIdf &, const StrLIdf &);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
StrLIdf operator& (const StrLIdf& from1, const StrLIdf& from2)
{
    if (!from1._chArray && !from2._chArray) return StrLIdf();
    char *tmp1 = new char[from1.Size() + 1];
    char *tmp2 = new char[from2.Size() + 1];
    strcpy(tmp1, from1._chArray);
    strcpy(tmp2, from2._chArray);
    short k = from2.Size();
    for (int i = 0; i < from1.Size(); ++i)
        for (int j = 0; j < from2.Size(); ++j)
            if (tmp1[i] == tmp2[j]) { tmp2[j] = '-'; --k; }
    char *tmp = new char[from1.Size() + k + 1];
    short t = 0;
    for (int i = 0; i < from2.Size(); ++i) 
        if (tmp2[i] != '-') { tmp[from1.Size() + t] = tmp2[i]; ++t; }
    tmp[from1.Size() + t] = NULL;
    return StrLIdf(tmp);
}
при попытке его вызвать подобным образом

C++
1
2
3
4
5
6
    StrL **testStr;
testStr = new StrL * [3];
testStr[0] = new StrLIdf("asdqwe");
testStr[1] = new StrLIdf("qwe5qwe");
testStr[2] = new StrLIdf;
*testStr[2] = operator&(*testStr[0], *testStr[1]);
пишется

1>c:\...\consoleapplication1.cpp(13): error C2664: 'operator &' : cannot convert parameter 1 from 'StrL' to 'const StrLIdf &'
1> Reason: cannot convert from 'StrL' to 'const StrLIdf'
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
помогите разобраться, как переписать оператор или обращение.

Добавлено через 5 часов 0 минут
upup
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 00:22     Обращение к бинарным операторам производного класса
Посмотрите здесь:

Инициализация конструкторов производного класса C++
Доступ к методам производного класса C++
C++ Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса
C++ Вызов метода производного класса через обращение к методу базового класса
C++ Вызов методов производного класса
C++ Предобъявление производного класса
Указатель на объект базового класса и адрес объекта производного класса C++
C++ Ошибка в функции производного класса

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
15.03.2013, 08:11     Обращение к бинарным операторам производного класса #2
Во-первых, оператор объявлен для StrLIdf, а вызывается для StrL. То есть Вы пытаетесь вызвать код, предназначенный для наследника, подпихивая ему родителя. При этом не каждый StrL является StrLIdf.
Во-вторых, зачем такой странный вызов оператора? Перегрузка операторов делается как раз для того, чтобы вызов для пользовательских типов смотрелся единообразно со встроенными. Вызывайте просто: a & b.
Yandex
Объявления
15.03.2013, 08:11     Обращение к бинарным операторам производного класса
Ответ Создать тему
Опции темы

Текущее время: 01:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru