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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
UnknownSmith
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 10
#1

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

15.03.2013, 00:22. Просмотров 217. Ответов 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++
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать классы внутри main.cpp, то всё нормально. Если же создавать в...

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

Создание указателя типа базового класса на экземпляр производного класса - C++
Добрый день! Иногда видел коды, где создавался указатель типа базового класса на объект класса - наследника, для чего это может применяться?

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

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

Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса - C++
Здравствуйте! Можно ли использовать перегруженный оператор ввода/вывода в поток из базового класса для объекта производного класса, если...

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

как сделать чтобы объект производного класса сам себя добавлял в список или массив указателей базового класса? - C++
я хотел так, но программа просто падает void Student::add(Base** head) { cout &lt;&lt; &quot;I here&quot; &lt;&lt; endl; this-&gt;setName(); //все...

Конструктор производного класса - C++
Доброго времени суток!! Значит так, есть у меня две строки большая и маленькая и два класс String и bString, где bString производный от...

Тип производного класса - C++
Как можно узнать тип производного класса на этапе компиляции?#include &lt;iostream&gt; #include &lt;type_traits&gt; struct A {}; struct B : A...

Предобъявление производного класса - C++
Привет всем. Такой вопрос:как предобъявить производный класс? Просто нужно сделать функцию друга как для производного, так и для базового...


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

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

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