30 / 7 / 0
Регистрация: 20.02.2016
Сообщений: 1,202
1

Как перенести operator из базового класса в производный?

15.03.2017, 21:37. Показов 482. Ответов 10
Метки нет (Все метки)

Добрый день!
Подскажите, пожалуйста, на простых примерах, как нужно работать с оператором перегрузки операций, если он находится в базовом классе, но нужно, чтобы он действовал и для объектов производного класса.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2017, 21:37
Ответы с готовыми решениями:

Производный класс не видит перегруженную операцию базового класса
Подскажите пожалуйста, почему производный класс, а именно его объект не видит перегруженную...

Есть производный класс и базовый; при чём производный использует только ЧАСТЬ ресурсов базового, правильно ли это?
Ну то есть базовый класс A, с полями, допустим, a, b, c, d. И я проектирую производный класс B и я...

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

Как построить экземпляр дочернего класса на основе готового экземпляра базового класса?
Если уже есть готовый объект базового класса. Могу я построить экземпляр дочернего на его основе,...

10
281 / 235 / 114
Регистрация: 07.09.2016
Сообщений: 587
15.03.2017, 22:07 2
Вы конкретно свою задачку изложите. Какой оператор и какое поведение ожидаете?
0
30 / 7 / 0
Регистрация: 20.02.2016
Сообщений: 1,202
15.03.2017, 22:38  [ТС] 3
Вначале сделал перегрузку объекта в обычную строку.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<string>
using namespace std;
class String
{
protected:
    enum{sz=20};
    char ch[sz];
public:
    String(){ ch[0] = '\0'; }
    String(char s[]){ strcpy_s(ch, s); }
    operator char*()
    {return ch;}
};
int main(){
    String str="Hello! Happy New Year!";
    cout << static_cast<char*>(str);
    system("pause");
    return 0;
А вот потом нужно добавить производный класс, который бы предупреждал, если бы в строке было больше символов, чем SZ. Понятно, как это можно сделать обычными способами введя функцию такую, например как
C++
1
void display(){cout<<str};
А как можно это сделать, вставив в производный класс operator как в базовом классе.
0
С чаем беда...
Эксперт CЭксперт С++
9156 / 4674 / 1269
Регистрация: 18.10.2014
Сообщений: 10,571
15.03.2017, 23:00 4
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
А вот потом нужно добавить производный класс, который бы предупреждал, если бы в строке было больше символов, чем SZ.
Ничего не понятно. В какой именно строке "больше символов, чем SZ"? И какое это все имеет отношение к operator в базовом классе?

И не String(char s[]), а String(const char s[]).
0
30 / 7 / 0
Регистрация: 20.02.2016
Сообщений: 1,202
15.03.2017, 23:58  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Pstring:public String
{
public:
Pstring(char s[])
{
if (strlen(s) > SZ - 1)        //если в строке больше символов, чем SZ
    {
        for (int j = 0; j < SZ - 1; j++)   
                  str[j] = s[j];
                  str[SZ-1]='\0';
              else
String(s);
}
// а как вывести строку на экран, перегрузив её через оператор, как это сделано в базовом классе выше?            
}
0
56 / 56 / 31
Регистрация: 24.10.2016
Сообщений: 186
16.03.2017, 01:37 6
Объявите operator char *() базового класса виртуальным и переопределите его в наследнике так, как вам нужно
0
Форумчанин
Эксперт CЭксперт С++
8169 / 5017 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
16.03.2017, 13:59 7
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Подскажите, пожалуйста, на простых примерах, как нужно работать с оператором перегрузки операций, если он находится в базовом классе, но нужно, чтобы он действовал и для объектов производного класса.
Просто не переопределять его в производном классе.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
struct Base
{
    explicit operator bool() const { return true; }
};
 
struct Derived : Base {};
 
int main()
{
    if (Derived())
        std::cout << "Hello world!\n";
}
0
С чаем беда...
Эксперт CЭксперт С++
9156 / 4674 / 1269
Регистрация: 18.10.2014
Сообщений: 10,571
17.03.2017, 11:09 8
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
// а как вывести строку на экран, перегрузив её через оператор, как это сделано в базовом классе выше?
Так а откуда у вас в коде вдруг взялось какое-то str? В базовом классе у вас ch... Что это за str такое?
0
30 / 7 / 0
Регистрация: 20.02.2016
Сообщений: 1,202
17.03.2017, 17:04  [ТС] 9
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Так а откуда у вас в коде вдруг взялось какое-то str? В базовом классе у вас ch... Что это за str такое?
Ошибка вышла. Думал про operator, переменную не заметил.
0
С чаем беда...
Эксперт CЭксперт С++
9156 / 4674 / 1269
Регистрация: 18.10.2014
Сообщений: 10,571
17.03.2017, 17:46 10
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Думал про operator
Прекрасно. Но в чем вопрос то? Если Pstring наследуется от String, то в Pstring уже есть тот же оператор - унаследовался из String. Зачем еще что-то делать? Откуда возник вопрос о каком то "переносе оператора"?
0
30 / 7 / 0
Регистрация: 20.02.2016
Сообщений: 1,202
17.03.2017, 23:23  [ТС] 11
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Откуда возник вопрос о каком то "переносе оператора"?
Оттуда, что информации об этом не нашёл.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2017, 23:23

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

Разработать производный от абстрактного класса Figure класс и класс, производный от производного
Разработать базовый абстрактный класс Figure с пустым виртуальным методом print для вывода в...

Как вызвать оператор базового класса в наследнике?
Всем привет! Имеется такая конструкция (мой вопрос - в комментарии к последнему классу): ...

Как передалеть operator= класса?
Вот готовая программа, но там одна проблема - после использования оператора=, при изменении...


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

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

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