Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
UnknownSmith
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 10
1

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

15.03.2013, 00:22. Просмотров 243. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 00:22
Ответы с готовыми решениями:

Вызов метода производного класса через обращение к методу базового класса
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать...

Почему объект производного класса не видит префиксный оператор из базового класса?
Короче создал я базовый класс с перегруженным префиксным оператором ++. Потом...

Как сложить объект базового класса с объектом производного(наследуемого класса)
Как умножить объект базового класса с объектом производного(наследуемого...

Создание указателя типа базового класса на экземпляр производного класса
Добрый день! Иногда видел коды, где создавался указатель типа базового класса...

Вызвать конструктор производного класса без конструктора базового класса
Здравствуйте! У меня есть базовый класс треугольник и производный класс...

1
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.03.2013, 08:11 2
Во-первых, оператор объявлен для StrLIdf, а вызывается для StrL. То есть Вы пытаетесь вызвать код, предназначенный для наследника, подпихивая ему родителя. При этом не каждый StrL является StrLIdf.
Во-вторых, зачем такой странный вызов оператора? Перегрузка операторов делается как раз для того, чтобы вызов для пользовательских типов смотрелся единообразно со встроенными. Вызывайте просто: a & b.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2013, 08:11

Указатель на объект базового класса и адрес объекта производного класса
Пример кода: class Class1 { public: Class1(int x) { j = new int;...

Определить обработчик исключений на преобразование указателя базового класса на указатель производного класса
Класс В является производным от класса А. Определить обработчик исключительной...

Вызов объектом базового класса функцию из производного класса!
Как можно осуществить вызов или передачу значения в базовый класс для...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru